python Socket模塊


 

UDP:

 

from socket import *

import struct

send_data = struct.pack('!H8sb5sb',1,'test.jpg',0,'octet',0) ========>利用pack可以規定發送的某個字符串占用幾個字節(可以用於構造數據包頭數據,比如數據包頭規定某一個字段必須為4個字節,而實際該字段內容只有一個‘1’,此時可以利用這個強行規定‘1’占4個字節)

recv_data = struct.unpack('!HH','接收到的數據') ========>相應的可以用unpack來解除這種限制。

udp_socket = socket(AF_INET,SOCK_DGRAM)  =========>創建一個UDP套接字

udp_socket.bind(('',9999))   ===========>將該套接字綁定到指定IP和端口(IP不寫代表全部)。

udp_socket.sendto(b'haha',('10.65.1.27',8888)) =======> 發送數據(注意:python3中要發送的數據需為二進制形式或者經過編碼的字符串(例:'haha'.encode('utf-8')))。

udp_socket.sendto(send_data,('10.65.1.27',8888))

print(udp_socket.recvfrom(1024))

 

 

TCP:

 

 

服務端:

from socket import *

server_socket = socket(AF_INET,SOCK_STREAM)

server_socket.bind('',8899)

server_socket.listen(5) ======>走到這一步TCP狀態已經可以達到ESTABLISHED了,且ESTABLISHED狀態的最大量為5,再有用戶連接過來時則不再發送回包。

client_socket,client_info = server_socket.accept() =====>TCP服務器每收到一個client鏈接都會生成一個新的套接字(client_socket)來為其(client_info指向該client的基本信息)服務,主socket繼續等待新的客戶到來。

(注意:子套接字變量名不能重復使用,每跟一個新用戶連接需生成一個新的子套接字名字)(注意:只要有足夠的accept就可以無視listen的值,有多少accept就可以有多少ESTABLISHED

while 1 :

    data = client_socket.recv(1024) ======>服務器端接收數據

    #client_socket.connect(client_info)  =======>如果服務器想要給客戶端回數據則不必再主動連接客戶端(因為已經與客戶端建立連接,直接發數據即可)

    client_socket.send(data)  ========>向客戶端發送數據

    print(data)

client_socket.close()

server_socket.close()

 

 

客戶端:

from socket import *

client_socket = socket(AF_INET,SOCK_STREAM)

client_socket.connect(('192.168.1.1',8899))

while 1 :

    client_socket.send(input('發送的內容').encode('utf-8'))

    client_socket.recv(1024) =====>由於全雙工該socket也可用來接收數據

client_socket.close()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM