標籤:udp span 客戶 not inpu 發送 cli color .so
AF_INET:IPV4
AF_INET6:IPV6
通訊端類型:
SOCK_STREAM:TCP
SOCK_DGRAM:UDP
建立TCP通訊端,也可以不傳遞參數,預設建立TCP通訊端
tcpSocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
下面是基於python3實現的簡單的TCP服務端和用戶端
TCP使用send、recv發送和接收資料
服務端:
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 break22 print("i have received data: ", data)23 sendData = "hello, i have received your date: %s" % data24 tcpClienSock.send(bytes(sendData, encoding="utf-8"))25 tcpClienSock.close()26 tcpSocket.close()
用戶端:
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 break16 tcpClientSock.send(bytes(data, encoding="utf-8"))17 recvData = tcpClientSock.recv(BUFFSIZE)18 if not recvData:19 break20 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" % data16 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 break14 udpClientSock.sendto(bytes(data, encoding="utf-8"), ADDR)15 recvData, addr = udpClientSock.recvfrom(BUFFSIZE)16 if not recvData:17 break18 print(recvData)19 udpClientSock.close()
Python網路編程筆記一