python网络(udp,tcp)

python中的网络1

1.认识IP地址
    Ip地址是用来唯一标识一台电脑主机的,好比我们的手机号。IP地址包括IPV4,IPV6,后者是对前者地址不够的补充。同时IP地址又主要分为主机IP和私有IP,主机IP都是127.0.0.1,私有IP有三种:192.168.xx.xx 172.16.xx.xx 10.0.xx.xx。 私有IP是进行局域网通信的时候网络选出的一个 随机可用IP地址分配给电脑。

2.认识端口

    端口是主机分配不同应用的用于收发数据通道(进行数据收发)
    端口号:0-65535.知名端口号:0-1023,剩余为动态端口号。
3.python中的通信

    通过IP地址找到目的主机,通过端口号找到对应应用进行数据的收发的过程!
4.几个常用命令

     netstat -an : 查看端口的使用状态
     lsof -i [tcp/udp]:端口号 -> 根据端口号查找对应的应用程序, 提示:如果查看是其它用户应用程序的端口号需要加上sudo,     比如:sudo lsof -i:端口号
     kill -9 进程编号->根据进程编号强制杀死指定进程
5.socket: 翻译成中文是套接字,进程之间通信的工具, 数据的发送和接收都是通过socket来完成,socket可以理解成数据的搬运工
udp协议下socket通信
udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # IPV4,udp绑定
adr = ('192.168.196.1', 8989)
send_data = '哈哈'
udp_socket.sendto(send_data.encode(encoding='gbk', errors="strict"), adr)  # 数据发送
time.sleep(2)
all_data = udp_socket.recvfrom(1024)
data, ip_port = udp_socket.recvfrom(1024)  # 元组拆包输出  # 数据接收
real_data = data.decode('gbk')
print(all_data)
print(real_data, ip_port)
udp_socket.close()

tcp协议下socket通信
服务器:
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)   # IPV4,tcp绑定
server_socket.bind(('', 9090))  #  端口绑定
server_socket.listen(128)  # 监听服务端输入,使套接字变为被动连接
while True:
    real_server_socket, id_port = server_socket.accept()  # 等待客户端连接
    file_name = real_server_socket.recv(1024)  # 数据接收
    real_name = file_name.decode('utf-8')
    if os.path.exists(real_name):
        with open(real_name, 'rb') as file:
            while True:
                data = file.read(1024)
                if len(data) > 0:
                    real_server_socket.send(data)  # 数据发送
                else:
                    break
    real_server_socket.close()
客户端:
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # IPV4,tcp绑定

client_socket.connect(('192.168.128.65', 9090))  # 连接服务器
file_name = input('请输入文件名:')
client_socket.send(file_name.encode('utf-8'))  # 发送数据
# 接受数据
all_data = b''
while True:
    data = client_socket.recv(1024) # 接收数据
    if data:
        all_data += data
    else:
        break
if len(all_data) == 0:
    print('文件不存在!')
else:
    with open('/home/python/Desktop/' + file_name, 'wb') as file:
        file.write(all_data)
client_socket.close()

 
 


socket通信流程:

  

猜你喜欢

转载自blog.csdn.net/weixin_31449201/article/details/80161655
今日推荐