version: python3
创建服务器
from socket import * from time import ctime # 设置HOST,PORT HOST = "" PORT = 20000 # 设置缓冲区大小 BUFSIZE = 1024 ADDR = (HOST, PORT) # 创建服务端socket tcpServerSock = socket(AF_INET, SOCK_STREAM) # 绑定到ADDR上 tcpServerSock.bind(ADDR) #监听, 最大监听数为5 tcpServerSock.listen(5) while True: print("waiting for connection...") # 等待连接 tcpClientSock, addr = tcpServerSock.accept() print("connected from: ", addr) # 设置了一个变量error用于区分exit退出 error = False while True: # 获取客户端发送的数据 data = tcpClientSock.recv(BUFSIZE) # 为空时退出循环 if not data: break # 接收到exit字样时,退出循环 if data.decode('utf-8').lower() == "exit": break # 接收到KeyboardInterrupt or EOFError 的错误信息时,退出循环并将error设为True,用于退出服务器 if data == bytes('Program interrupted by user.', encoding="utf-8") or \ data == bytes('Read beyond end of file.', encoding="utf-8"): error = True break # 发送数据到客户端 tcpClientSock.send(bytes("[{} {}]".format(ctime(), data), encoding="utf-8")) # 断开客户端连接 tcpClientSock.close() # 接收到KeyboardInterrupt or EoFError时退出服务器 if error: break # 关闭服务器 tcpServerSock.close()创建客户端
from socket import * HOST = "127.0.0.1" PORT = 20000 BUFSIZE = 1024 ADDR = (HOST, PORT) # 创建客户端socket tcpClientSock = socket(AF_INET, SOCK_STREAM) # 连接服务器 tcpClientSock.connect(ADDR) while True: try: data = input(">") except KeyboardInterrupt or EOFError as e: data = e.__doc__ # 输入为空时,跳出循环 if not data: break tcpClientSock.send(bytes(data, encoding="utf-8")) data = tcpClientSock.recv(BUFSIZE) # 接收到数据为空时,跳出循环 if not data: break print(data.decode('utf-8')) tcpClientSock.close()创建服务器
from socket import * from time import ctime HOST = "" PORT = 30000 BUFSIZE = 1024 ADDR = (HOST, PORT) udpServerSock = socket(AF_INET, SOCK_DGRAM) udpServerSock.bind(ADDR) while True: print("waiting for connection...") data, addr = udpServerSock.recvfrom(BUFSIZE) udpServerSock.sendto(bytes("[{}] {}".format(ctime(), data), encoding="utf-8"), addr) print("...received from and returned to: ", addr) udpServerSock.close()创建客户端
from socket import * HOST = "127.0.0.1" PORT = 30000 BUFSIZE = 1024 ADDR = (HOST, PORT) udpClientSock = socket(AF_INET, SOCK_DGRAM) while True: data = input(">") if not data: break udpClientSock.sendto(bytes(data, encoding="utf-8"), ADDR) data, ADDR = udpClientSock.recvfrom(BUFSIZE) if not data: break print(data.decode("utf-8")) udpClientSock.close()