东方故事十二生肖,潜力英才,谢风华
离线可使用,功能更完善,安全性更高
# 基于tcp # server端 import socket sk = socket.socket() sk.bind(('127.0.0.1', 5002)) # 5002是端口 # 打开监听模式 sk.listen() # 建立连接,conn是连接,addr是连接的地址 conn, addr = sk.accept() # 发送信息 conn.send(b'hello, i am server') # 最多接收1024字节 msg = conn.recv(1024) print(msg) print(addr) conn.close() # 关闭连接 sk.close() # 关闭整个服务 ######################################### # client端 import socket sk = socket.socket() # 建立连接 sk.connect(('127.0.0.1', 5002)) # 接收信息 msg = sk.recv(1024) print(msg) # 发送信息 sk.send(b'hello, i am client') sk.close() # 关闭连接
需要用到.recvfrom
(可接收信息和ip)和.sendto
(发送信息需附带ip地址)。
# server端 # 一服务端对多客户端通信 # 服务端不用主动退出,由客户端收发消息进行退出 import socket sk = socket.socket(type = socket.sock_dgram) # 默认参数是tcp,此参数为udp sk.bind(('127.0.0.1', 5002)) while true: # 不能先发送,因为不知道接收端地址信息,只能等待接收,并且必须接收到客户端的地址 msg_r, addr = sk.recvfrom(1024) print(addr) print(msg_r.decode('utf-8')) msg_s = input(">>>") sk.sendto(msg_s.encode('utf-8'), addr) ################################################ # client端 import socket sk = socket.socket(type = socket.sock_dgram) # 传入服务端地址 server = ('127.0.0.1', 5002) while true: msg_s = input(">>>") sk.sendto(msg_s.encode('utf-8'), server) if msg_s == "拜拜": break # 接收服务端的信息,由于知道服务端地址所以不需要recvfrom msg_r = sk.recv(1024) if msg_r.decode('utf-8') == "拜拜": break print(msg_r.decode('utf-8'))
解决办法:设置边界
自定义协议:发送端统计长度,每次将长度固定为n字节发送
# server端同时发送两条消息 msg_s1 = input(">>>") msg_s2 =input(">>>") lens = str(len(msg_s1)) # 统计msg_s1的长度,ziff传入数据应为str,所以要转成str len = lens.zfill(4) # 将收集到的长度大小统一扩至4字节,例如msg_s1长度为6字节,则为0006 conn.send(len.encode('utf-8')) # 将长度信息发送出去 conn.send(msg_s1.encode('utf-8')) conn.send(msg_s2.encode('utf-8')) # clien端接收 len = int(sk.recv(4).decode('utf-8')) # 接收长度信息 msg_r1 = sk.recv(len) msg_r2 = sk.recv(1024) print(msg_r2.decode('utf-8')) print(msg_r1.decode('utf-8')) ############################################################### # struct方法 # server端同时发送两条消息 msg_s1 = input(">>>") msg_s2 =input(">>>") lens_byte = struct.pack('i', len(msg_s1)) # 可以将数据转成固定4字节 conn.send(lens_byte) conn.send(msg_s1.encode('utf-8')) conn.send(msg_s2.encode('utf-8')) # clien端接收 lens_byte = sk.recv(4) len = struct.unpack('i', lens_byte)[0] # unpack返回值为元组,第一位即为长度信息 msg_r1 = sk.recv(len) msg_r2 = sk.recv(1024) print(msg_r1.decode('utf-8')) print(msg_r2.decode('utf-8'))
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Python 实现将numpy中的nan和inf,nan替换成对应的均值
python爬虫把url链接编码成gbk2312格式过程解析
网友评论