一、socketserver模块
服务端:
#使用socketserver写服务端 #导入模块 import socketserver #自己定义一个类,必须继承BaseRequestHandler class MyTcp(socketserver.BaseRequestHandler): #必须重写handle方法 def handle(self): try: while True : #通信循环 # print(self) #给客户端回消息 #conn对象就是request #接收数据 print(self.client_address) data=self.request.recv(1024) print(data) if len(data)==0: return #发送数据 self.request.send(data.upper()) except Exception: pass if __name__ == '__main__': #实例化得到一个tcp连接的对象,Threading意思是说,只要来了请求,它自动的开线程来处理连接跟交互数据 #第一个参数是绑定的地址,第二个参数传一个类 server=socketserver.ThreadingTCPServer(('127.0.0.1',8009),MyTcp) #一直在监听 #这么理解:只要来一个请求,就起一个线程(造一个人,做交互) server.serve_forever()
客户端:
import socket import time soc=socket.socket() soc.connect(('127.0.0.1',8009)) while True: soc.send('xxxx'.encode('utf-8')) print(soc.recv(1024))
二、udp协议
服务端:
# 基础版本 # import socket # #udp # server=socket.socket(type=socket.SOCK_DGRAM) # # server.bind(('127.0.0.1', 8003)) # # udp不要建立连接,直接发 # #需不需要监听? # #跟tcp的不是一样的 # # data=server.recvfrom(1024) # data,addr=server.recvfrom(1024) # #data 是个元组,第一个参数是数据不部分,第二个参数是客户端地址 # print(data) # server.sendto(data.upper(),addr) #加入通信循环 import socket #udp server=socket.socket(type=socket.SOCK_DGRAM) server.bind(('127.0.0.1', 8003)) while True: data,addr=server.recvfrom(1024) print(data) server.sendto(data.upper(),addr)
客户端:
# import socket # #udp # client=socket.socket(type=socket.SOCK_DGRAM) # # # #直接发 # client.sendto(b'lqz',('127.0.0.1', 8003)) # data=client.recvfrom(1024) # print(data) #加入通信循环 import socket #udp client=socket.socket(type=socket.SOCK_DGRAM) while True: msg=input('>>:') #直接发 client.sendto(msg.encode('utf-8'),('127.0.0.1', 8003)) data=client.recvfrom(1024) print(data)