建立TCP连接的过程在服务器端和客户端的一系列步骤:
在TCP服务器中,用来接收连接的套接字对象与用来执行客户端后续通信的套接字对象是不同的。具体来说,accept()调用返回实际用来连接的新套接字对象。这样以来,服务器就可以同时管理大量的客户端连接。
1.创建TCP服务器
# filename:tcpServer.pyfrom socket import *from time import ctimeHOST = '' # HOST为空与INADDR_ANY含义相同,表示任何地址PORT = 21567 # 端口号21567BUFSIZE = 1024 # 缓冲区的大小为1KADDR = (HOST, PORT) # 地址元组# 创建服务器端套接字tcpSerSock = socket(AF_INET, SOCK_STREAM)# 将套接字与地址绑定tcpSerSock.bind(ADDR)# 监听连接tcpSerSock.listen(5)# 服务器进入无限循环while True: print('waiting for connection...') # 接受客户的连接,返回客户端套接字和地址的元组 # 返回的新的客户端套接字可以用于后续的通信 tcpCliSock, addr = tcpSerSock.accept() print('...connected from:', addr) # 通信循环 while True: # 接收来自客户端的数据 re_data = tcpCliSock.recv(BUFSIZE) if not re_data: break # 发送数据给客户端,内容:[时间]接受的信息 # bytes.decode()对接收的内容进行解码 se_data = ['[', str(ctime()), ']', str(re_data.decode())] # str.encode()对发送内容进行编码 tcpCliSock.send((''.join(se_data)).encode()) # 关闭客户端套接字 tcpCliSock.close()# 关闭服务器端套接字tcpSerSock.close()
2.创建TCP客户端
# filename:tcpClient.pyfrom socket import *HOST = 'localhost' # HOST为localhost表示本机,可以换成其他表示服务器端的地址或者域名PORT = 21567 # 端口号21567BUFSIZE = 1024 # 缓冲区的大小为1KADDR = (HOST, PORT) # 地址元组# 创建客户端套接字tcpCliSock = socket(AF_INET, SOCK_STREAM)# 连接服务器端tcpCliSock.connect(ADDR)# 通信循环while True: # 提示用户输入 se_data = input('> ') if not se_data: break # 向服务器端发送数据 # str.encode()对发送内容进行编码 tcpCliSock.send(se_data.encode()) # 接收来自服务器端的数据 re_data = tcpCliSock.recv(BUFSIZE) if not re_data: break # bytes.decode()对接收的内容进行解码 print(re_data.decode())# 关闭客户端套接字tcpCliSock.close()
3.运行