一 tcp网络编程
1 server 端 2 3 import socket 4 sk=socket.socket() #实例化一个对象 5 sk.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)#端口可以重用 6 sk.bind(('127.0.0.1',9100)) 7 sk.listen()#监听 8 while True: 9 conn,addr=sk.accept() #阻塞,三次握手完毕 10 while True: 11 inp=input('请输入你要发送的消息:') 12 conn.send(inp.encode('utf-8')) 13 if inp == 'q': break 14 ret=conn.recv(1024).decode('utf-8') 15 if ret == 'q': break 16 print(ret) 17 18 conn.close() 19 sk.close()
client端
1 import socket 2 sk=socket.socket() 3 #while True: 4 sk.connect(('127.0.0.1',9100)) 5 while True: 6 ret=(sk.recv(1024).decode('utf-8')) 7 if ret == 'q': break 8 print(ret) 9 inp=input('请输入你要发送的消息:') 10 sk.send(inp.encode('utf-8')) 11 if inp == 'q': break 12 13 sk.close()
二 tcp粘包
1 发送方的缓存机制
发送数据时间间隔很短,数据了很小,会合到一起,产生粘包
1 服务端 2 #_*_coding:utf-8_*_ 3 from socket import * 4 ip_port=('127.0.0.1',8080) 5 6 tcp_socket_server=socket(AF_INET,SOCK_STREAM) 7 tcp_socket_server.bind(ip_port) 8 tcp_socket_server.listen(5) 9 10 11 conn,addr=tcp_socket_server.accept() 12 13 14 data1=conn.recv(10) 15 data2=conn.recv(10) 16 17 print('----->',data1.decode('utf-8')) 18 print('----->',data2.decode('utf-8')) 19 20 conn.close() 21 22 服务端