One, UDP communication
udp is no link, and then start the service can receive messages directly, no need to establish a link in advance
Two, UDP basic use
server:
. 1 Import Socket 2 . 3 Server = socket.socket (type = socket.SOCK_DGRAM) # the UDP protocol . 4 server.bind (( ' 127.0.0.1 ' , 8080 )) . 5 # the UDP connection pool it is unnecessary to provide the half half-connection pool does not concept . 6 . 7 # because there is no two-way communication channel does not need to accept the direct circulation is . 8 the while True: . 9 data, server.recvfrom addr = (1024 ) 10 Print ( ' data: ' , data) # client message sent . 11 Print ( ' address: ' , addr) # Client's address 12 server.sendto (data.upper (), addr)
client:
Import Socket Client = socket.socket (type = socket.SOCK_DGRAM) # without establishing a connection directly to the communication cycle the server_address = ( ' 127.0.0.1 ' , 8080 ) the while True: client.sendto (B ' Hello ' , the server_address) Data, addr = client.recvfrom (1024 ) Print ( ' service data sent by the end ' , data) Print ( ' server address ' , addr)
Three differences between TCP and UDP,
Datagram Protocol (own header), so there is no problem sticking package
server:
1 import socket 2 3 4 server = socket.socket(type=socket.SOCK_DGRAM) 5 server.bind(('127.0.0.1',8080)) 6 7 8 # while True: 9 data, addr = server.recvfrom(1024) 10 print(data) 11 data, addr1 = server.recvfrom(1024) 12 print(data) 13 data, addr2 = server.recvfrom(1024) 14 print(data)
client:
import socket client = socket.socket(type=socket.SOCK_DGRAM) server_address = ('127.0.0.1',8080) client.sendto(b'what u doing?',server_address) client.sendto(b'what u doing?',server_address) client.sendto(b'what u doing?',server_address)
Four, socketserver module
TCP protocol in use:
server:
1 import socketserver 2 3 class MyServer(socketserver.BaseRequestHandler): 4 def handle(self): 5 while True: 6 data = self.request.recv(1024) 7 print(self.client_address) #客户端地址 8 print(data.decode('utf-8')) 9 self.request.send(data.upper()) 10 11 if __name__ == '__main__': 12 ''' 13 A client is connected automatically to the method defined from the handle class to handle 14 '' ' 15 Server socketserver.ThreadingTCPServer = (( ' 127.0.0.1 ' , 8080), MyServer) # Create 16 server.serve_forever () # start the service object
client:
1 import socket 2 3 client = socket.socket() 4 client.connect(('127.0.0.1',8080)) 5 6 while True: 7 client.send(b'hello') 8 data = client.recv(1024) 9 print(data.decode('utf-8'))
UDP protocol in use:
server:
1 import socketserver 2 3 class MyServer(socketserver.BaseRequestHandler): 4 def handle(self): 5 while True: 6 data,sock = self.request 7 print(self.client_address)#客户端的地址 8 print(data.decode('utf-8')) 9 sock.sendto(data.upper(),self.client_address) 10 11 if __name__ == '__main__': 12 ''' 13 A client is connected automatically to handle custom method to handle 14 '' ' 15 Server socketserver.ThreadingUDPServer = (( ' 127.0.0.1 ' , 8080), MyServer) # Create a TCP-based object 16 server.serve_forever () # start the service object
client:
1 import socket 2 import time 3 4 client = socket.socket(type = socket.SOCK_DGRAM) 5 server_address = ('127.0.0.1',8080) 6 7 while True: 8 client.sendto(b'hey boy',server_address) 9 data,addr = client.recvfrom(1024) 10 print(data.decode('utf-8'),addr) 11 time.sleep(1)
Fifth, to implement a simple version of the QQ
server:
1 import socket 2 server = socket.socket(type=socket.SOCK_DGRAM) 3 server.bind(('127.0.0.1',8080)) 4 5 while True: 6 data,addr = server.recvfrom(1024) 7 print(data.decode('utf-8')) 8 msg = input('>>>: ').strip() 9 server.sendto(msg.encode('utf-8'),addr)
client1:
1 import socket 2 3 client = socket.socket(type=socket.SOCK_DGRAM) 4 server_address = ('192.168.12.58',8080) 5 6 while True: 7 msg = input('>>>:') 8 msg = "来自客户端1的消息: %s"%msg 9 client.sendto(msg.encode('utf-8'),server_address) 10 data,addr = client.recvfrom(1024) 11 print(data.decode('utf-8'))
client2:
1 import socket 2 3 client = socket.socket(type=socket.SOCK_DGRAM) 4 server_address = ('192.168.12.58',8080) 5 6 while True: 7 msg = input('>>>:') 8 msg = "来自客户端2的消息: %s"%msg 9 client.sendto(msg.encode('utf-8'),server_address) 10 data,addr = client.recvfrom(1024) 11 print(data.decode('utf-8'))
client3:
1 import socket 2 3 client = socket.socket(type=socket.SOCK_DGRAM) 4 server_address = ('192.168.12.58',8080) 5 6 while True: 7 msg = input('>>>:') 8 msg = "来自客户端3的消息: %s"%msg 9 client.sendto(msg.encode('utf-8'),server_address) 10 data,addr = client.recvfrom(1024) 11 print(data.decode('utf-8'))