TCP网络协议通信原理(客户端和服务器端)
下面直接用代码来说明TCP协议的基础知识:
服务器端代码块:
from socket import * from time import ctime ''' 指定主机地址、工作端口号、接收缓存的长度 服务器端的HOST为空,表示它可以使用任意可用的地址 ''' HOST='' PORT=21263 BUFSIZ=1024 ADDR=(HOST,PORT) # 创建套接字 ,把套接字绑定到服务器地址,开启TCP监听 tcpSvrSock=socket(AF_INET,SOCK_STREAM) tcpSvrSock.bind(ADDR) tcpSvrSock.listen(5) while True: ''' 不断等待接收客户端的连接。我们通过accept() 获取到客户端的tcpCliSock和addr,于是后续可以通过这个 tcpCliSock专门处理该客户端的事务(从而与其他请求的客户端区分开来) ''' tcpCliSock,addr=tcpSvrSock.accept() print('内容来自:',addr) # print('tcpCliSock:',tcpCliSock) while True: data=tcpCliSock.recv(BUFSIZ) if not data: break # 不为空则把消息解析出来,添加时间戳 data=data.decode('utf-8') print(data) data1=input('回复客户端:') respMsg='[%s]%s'%(ctime(),data1) # 过重新编码成ASCII字节后,通过send()发送回去给客户端 tcpCliSock.send(bytes(respMsg,'utf-8')) tcpCliSock.close() tcpSvrSock.close()
客户端代码块:
from socket import * ''' 指定主机地址、工作端口号、接收缓存的长度 这里的HOST为服务器端所在主机的地址,由于我是在本地进行通信测试的, 所以地址设置为127.0.0.1(localhost)。在实际网络通信的时候,根据 具体的情况进行相应的修改。客户端填写的PORT必须与服务器填写的PORT 对应才能正常通信。 ''' HOST='127.0.0.1' PORT=21263 BUFSIZ=1024 ADDR=(HOST,PORT) # 创建套接字 ,主动调用并通过connect()连接到服务器。 tcpCliSock=socket(AF_INET,SOCK_STREAM) tcpCliSock.connect(ADDR) while True: data=input('>>>') if not data: break tcpCliSock.send(bytes(data,'utf-8')) if not data: break # 接收服务器返回的数据 rscData=tcpCliSock.recv(BUFSIZ) print(rscData.decode('utf-8')) tcpCliSock.close() ''' 如果我们想要将代码改成相应的ipv6的形式, 我们只需要把HOST改成“::1”,sock_family改成AF_INET6即可。 '''
更多详细内容可以参见:https://blog.csdn.net/sinat_36645384/article/details/79128137