1. 程式人生 > >Python網絡編程筆記一

Python網絡編程筆記一

服務端 log close logs bytes 連接 message rom 傳遞

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 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()

客戶端:

 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()

Python網絡編程筆記一