AF_INET:IPV4python
AF_INET6:IPV6服務器
套接字類型:socket
SOCK_STREAM:TCPtcp
SOCK_DGRAM:UDPui
建立TCP套接字,也能夠不傳遞參數,默認建立TCP套接字spa
tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
下面是基於python3實現的簡單的TCP服務端和客戶端code
TCP使用send、recv發送和接收數據blog
服務端:utf-8
1 import socket 2 3 HOST = "127.0.0.1" 4 PORT = 9999 5 BUFFSIZE = 1024 6 ADDR = (HOST, PORT) 7 8 tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 9 10 tcpSocket.bind(ADDR) 11 12 tcpSocket.listen(5) 13 14 while True: 15 print("watting clien connection...") 16 tcpClienSock, addr = tcpSocket.accept() 17 print("connected from:", addr) 18 while True: 19 data = tcpClienSock.recv(BUFFSIZE) 20 if not data: 21 break 22 print("i have received data: ", data) 23 sendData = "hello, i have received your date: %s" % data 24 tcpClienSock.send(bytes(sendData, encoding="utf-8")) 25 tcpClienSock.close() 26 tcpSocket.close()
客戶端:input
1 import socket 2 3 HOST = "127.0.0.1" 4 PORT = 9999 5 BUFFSIZE = 1024 6 ADDR = (HOST, PORT) 7 8 tcpClientSock = socket.socket() 9 r = tcpClientSock.connect(ADDR) 10 print(r) 11 12 while True: 13 data = input(">>") 14 if data == "q" or data == "quit": 15 break 16 tcpClientSock.send(bytes(data, encoding="utf-8")) 17 recvData = tcpClientSock.recv(BUFFSIZE) 18 if not recvData: 19 break 20 print(recvData) 21 tcpClientSock.close()
接下來是簡單的UDP服務器和客戶端實現
UDP使用sendto、recvfrom發送和接收數據
UDP服務器:
1 import socket 2 3 HOST = "127.0.0.1" 4 PORT = 9999 5 BUFFSIZE = 1024 6 ADDR = (HOST, PORT) 7 #UDP服務器建立套接字後,只須要綁定上IP和端口號,等待接收數據便可 8 #不須要listen和accept 9 udpSocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 10 udpSocket.bind(ADDR) 11 12 while True: 13 print("watting message...") 14 data, addr = udpSocket.recvfrom(BUFFSIZE) #會返回發送者地址 15 sendData = "hello, i have recv your date: %s" % data 16 udpSocket.sendto(bytes(sendData, encoding="utf-8"), addr) 17 print("receive message %s from %s" % (data, addr)) 18 udpSocket.close()
UDP客戶端:
1 import socket 2 3 HOST = "127.0.0.1" # 'localhost'也能夠 4 PORT = 9999 5 BUFFSIZE = 1024 6 ADDR = (HOST, PORT) 7 #建立套接字便可發送數據,不須要connect鏈接 8 udpClientSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 9 10 while True: 11 data = input(">>") 12 if data == "q" or data == "quit": 13 break 14 udpClientSock.sendto(bytes(data, encoding="utf-8"), ADDR) 15 recvData, addr = udpClientSock.recvfrom(BUFFSIZE) 16 if not recvData: 17 break 18 print(recvData) 19 udpClientSock.close()