计算机网络基础

Posted gaowenxingxing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算机网络基础相关的知识,希望对你有一定的参考价值。

ip地址
 
A类:网络号7位
主机号21位
 
B类:网络号14位
主机号:14位
 
c类:网络号21位
主机号7位
 
D类地址是用来多播的
 
 
E类是用来保留的
 
 
192.168.1.1~255 常见的c类
 
 
一共有4组数,前面的标记是否为同一个局域网

端口号
 
它就是一串数字
ip地址是用来区分哪台电脑的
端口号是用来标记发送过来的东西是给哪个程序的
所以发送数据的过程①确定发给哪台电脑②发送给这台电脑的哪个进程
 
知名端口:小于1024,不能随便用,80端口分配给http
               
动态端口:1024~65535之间,这个是随机用
 
发送数据的过程
发送方
接收方
目的ip
 
源ip
 
目标端口
 
源端口
 
内容
 
 

程序:这一个程序没有执行之前叫程序
进程:一个程序运行起来之后就叫进程
网路就是让两个电脑之间的进程进行通信

socket简介
         套接字:插口,它是进程间通信的一种方式
使用socket流程
   import socket
技术分享图片技术分享图片
创建套接字
 
tcp客户端
#!usr/bin/env python  
#-*- coding:utf-8 _*-

import socket
def main():
    #1.创建tcp套接字
    tcp_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
    #连接服务器
    server_ip=input("请输入要连接的服务器ip")
    server_port=input("请输入要连接的的服务器的port")
    server_addr=input(server_ip,server_port)
    tcp_socket.connect(server_addr)
    #发送,接收数据
    send_data=input("请输入要发送的数据")
    tcp_socket.send(send_data.encode("gbk"))
    #关闭套接字
    tcp_socket.close()

if __name__=="__main__":
    main()

  tcp服务器端

#!usr/bin/env python  
#-*- coding:utf-8 _*-

‘‘‘
tcp服务器
1.socket创建一个套接字
2.bind绑定ip和port
3.listen使套接字可以变为被动连接
4.accept等待客户端的连接
5.recv/send接收发送的数据


‘‘‘

import socket

def main():
    tcp_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

    tcp_server.bind("",3630)#这里绑定本地任何一个IP都行
    tcp_server.listen(128)#这个值一般写128就行了
    new_client,clinet_addr=tcp_server.accept()#accept他有一个返回值,左边有两个变量,这叫做拆包,后面的元组中有多少个变量
    # 更好的利用元组的返回值,直接就拆包就行l
    # 监听套接字等待有新的客户端进行连接
    # accept产生的新的套接字用来为客户端服务
    print(clinet_addr)

    # 接收客户端发送过来的请求
    recv_data=new_client.recv(1024)
    print(recv_data)

    # 回送一部分数据给客户端
    new_client.send("hahaha".encode("gbk"))
#    关闭套接字
    new_client.close()
    tcp_server.close()



#记住哦,以后先写这个
if __name__ == "__main__":
    main()

  udp_socket

#!usr/bin/env python  
#-*- coding:utf-8 _*-  
import socket
def main():
#1.创建一个udp套接字
    udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    #绑定本地信息,若没有绑定
    udp_socket.bind("",7891)
    # 循环发送数据
    while True:
            # 2.可以使用套接字收发数据
            # 从键盘获取数据
            send_data=input("please input")
            if send_data=="exit":
                break
            # udp_socket.sendto(b"hahahahah",("192.168.1.104",7788))#后面是一个元祖
            #  若后面直接是一个字符串,就可以直接加上一个b
            udp_socket.sendto(send_data.encode("utf-8"),("192.168.33.1",8080))
    #3.关闭套接字
    udp_socket.close()
if __name__=="__main__":
    main()

  udp聊天器

#!usr/bin/env python  
#-*- coding:utf-8 _*-  
# 使用同一个套接字,获取收发的数据
import socket
def main():
    udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)

    dest_id=input("对方id")

    dest_port=int(input("对方端口"))
    send_data = input("please input")
    udp_socket.sendto(send_data.encode("utf-8"),(dest_id,dest_port))
    # 套接字是可以同时收发数据的
    #接收回送过来的数据
    recv_data=udp_socket.recvfrom(1024)
    print(recv_data)
    udp_socket.close()

if __name__ == __main__:
    main()

 

#!usr/bin/env python  
#-*- coding:utf-8 _*-
# 同一时刻只能单方面发送信息
# 半双工,对讲机

# 全双工:同一时刻可以双方同时
# socket属于全双工

# udp他不是很稳定,不能保证数据能够获取到,对方手收到数据,他不会告诉你,但是tcp收到了数据会告诉你
# tcp:他会比udp更加稳定一些
# tcp会有一个应答响应机制
‘‘‘

tcp与udp的不同点
面向连接
重发丢失的数据
无差错的数据传输
阻塞&流量控制:避免主机发送过快而导致来不解接收
舍弃重读的数据包
超时重传

现在大部分的网络通讯都是tcp,保证类数据传输的额可靠性

‘‘‘


‘‘‘
tcp
严格区分客户端和服务器
服务器就是一个程序

客户端就是一个app

‘‘‘

接收数据
#!usr/bin/env python  
#-*- coding:utf-8 _*-
# 接收和发送数据的格式很固定
import socket
def main():
    #1.创建套接字
    udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    #2.绑定一个本地信息
    localaddr=("",7891)#必须绑定自己的的ip和port,同一个端口,同一时刻不允许被用两次
    udp_socket.bind(localaddr)
    #3.接收数据
    recv_data=udp_socket.recvfrom(1024)
    # recv_data这个变量中存储的是一个元组(接收道德数据,(发送发的ip,port))
    recv_msg=recv_data[0]  #存储接收的数据
    send_addr=recv_data[1]  #存储发送方的地址信息
    #4.打印接收到的数据

    print(recv_data)
    print("%s:%s"%(str(send_addr),recv_msg.decode("gbk")))
    #5.关闭套接字
    udp_socket.close()

if __name__ == __main__:
    main()

案例

#!usr/bin/env python  
#-*- coding:utf-8 _*-
import socket

def send_msg(self,a):
    ‘‘‘发送消息‘‘‘
    # 1.发送
    dest_id = input("please input id:")
    dest_port = int(input("please input port"))
    # 获取要发送的内容
    send_data = input("please input content")
    a.sendto(send_data.encode("gbk"), (dest_id, dest_port))

def recv_msg(self,b):
    ‘‘‘接收消息‘‘‘
    # 接收并显示
    recv_data = b.recvfrom(1024)
    print("%s:%s " % str(recv_data[1], recv_data[0].decode("gbk")))


def main():
    # 创建套接字
    udp_socket=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    # 绑定信息
    udp_socket.bind("",7891 )
    # 循环来处理
    while True:
        print("-----xx聊天器----")
        print("1:发送信息")
        print("2.接收消息")
        print("0:退出系统")
        op=input("要输入的功能")
        if op==1:
            send_msg(udp_socket)
        elif op==2:
            recv_msg(udp_socket)
        elif op==0:
            break
        else:
            print("输入有误,重新输入。。")



if __name__ == "__main__":
    main()

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
#!usr/bin/env python  
#-*- coding:utf-8 _*-

‘‘‘
tcp服务器
1.socket创建一个套接字
2.bind绑定ip和port
3.listen使套接字可以变为被动连接
4.accept等待客户端的连接
5.recv/send接收发送的数据


‘‘‘

import socket

def main():
tcp_server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)

tcp_server.bind("",3630)#这里绑定本地任何一个IP都行
tcp_server.listen(128)#这个值一般写128就行了
new_client,clinet_addr=tcp_server.accept()#accept他有一个返回值,左边有两个变量,这叫做拆包,后面的元组中有多少个变量
# 更好的利用元组的返回值,直接就拆包就行l
# 监听套接字等待有新的客户端进行连接
# accept产生的新的套接字用来为客户端服务
print(clinet_addr)

# 接收客户端发送过来的请求
recv_data=new_client.recv(1024)
print(recv_data)

# 回送一部分数据给客户端
new_client.send("hahaha".encode("gbk"))
# 关闭套接字
new_client.close()
tcp_server.close()



#记住哦,以后先写这个
if __name__ == "__main__":
main()

















































































以上是关于计算机网络基础的主要内容,如果未能解决你的问题,请参考以下文章

VSCode自定义代码片段14——Vue的axios网络请求封装

[vscode]--HTML代码片段(基础版,reactvuejquery)

使用从循环内的代码片段中提取的函数避免代码冗余/计算开销

视频二次裁剪时间计算出原片的时间片段算法

视频二次裁剪时间计算出原片的时间片段算法

[Go] 通过 17 个简短代码片段,切底弄懂 channel 基础