python中Socket的使用

2021-08-03 07:04:44 字數 3503 閱讀 7418

前一段時間學習python網路程式設計,完成簡單的通過python實現網路通訊的功能。現在,將python中socket

通訊的基本實現過程做乙個記錄備份.

python 中的socket通訊較為簡單,僅需要幾行**就可實現。和一般的網路通訊一樣,通訊方式分為udp和tcp兩種方式,兩種方式的處理也略有不同。tcp通訊為傳輸控制協議(transmission control protocol),是一種面向連線、可靠的、基於位元組流的傳輸層通訊協議(tcp/ip協議簇劃分的通訊協議的其中一層);udp通訊為使用者資料報協議(user datagram protocol),是一種面向無連線、不可靠的、基於報文的傳輸層通訊協議。就是tcp/ip中的兩種傳輸層通訊協議,有關tcp/ip和tcp、udp的詳細介紹視情況而定看是否需要單獨介紹,由於內容涉及較廣,個人並不能完全完整詳細的介紹仔細。

python網路通訊需要匯入乙個socket模組來支援通訊過程。socket通訊分為客戶端和服務端。服務端負責監聽當前裝置介面的資訊傳送情況,客戶端實現通過ip和介面向目的主機傳送資訊的功能。接下來,主要看python中的tcp、udp的通訊方法.

1) tcp

服務端**如下:

import socket

#socket.af_inet:ipv4,socket.sock_stream:tcp

server_socket=socket.socket(socket.af_inet,socket.sock_stream)

server_socket.bind((target,port))

server_socket.listen(5)

while

true:

client_socket,addr=server_socket.accept()

client_handler=threading.thread(target=handler_socket,args=(client_socket,addr,mode))

client_handler.start()

defhandler_socket

(client_socket,addr,mode="tcp"):

response=""

content=""

print

"accepted tcp connection from:%s:%d" % (addr[0],addr[1])

while

true:

response=client_socket.recv(2048)

content+=response

while len(response)<2048:

print

"content:%s" % content

response=""

content=""

a=raw_input("send to:")

if len(a):

client_socket.send(a)

客戶端**:

client=socket.socket(socket.af_inet,socket.sock_stream)

client.connect((target,port))

a=raw_input("input your text what you want to send:")

iflen(a):

client.send(a)

while true:

buffer=""

response=""

a=""

while

"\n"

notin response:

response=client.recv(2048)

buffer+=response

print "received buffer:%s" % buffer

a=raw_input("send to server:")

iflen(a):

client.send(a)

2) udp

服務段**:

#socket.af_inet:ipv4,socket.sock_stream:udp

sever_socket=socket.socket(socket.af_inet,socket.sock_dgram)

server_socket.bind((target,port))

server_socket.listen(5)

while

true:

client_socket,addr=server_socket.accept()

client_handler=threading.thread(target=handler_socket,args=(client_socket,addr,mode))

client_handler.start()

pass

defhandler_socket

(client_socket,addr,mode="tcp"):

response=""

content=""

print

"accepted udp connection from:%s:%d" % (addr[0],addr[1])

while

true:

response=client_socket.recvfrom(2048)

content+=response

while len(response) <2048:

print

"content:%s" % content

response=""

content=""

a=raw_input("send to:")

if len(a):

client_socket.sendto(a,addr)

客戶端**

client=socket.socket(socket.af_inet,socket.sock_dgram)

a=raw_input("input your text what you want to send:")

iflen(a):

client.sendto(a,(target,port))

while true:

buffer=""

response=""

a=""

while

""in response:

response,addr=client.recvfrom(4096)

print "received buffer:%s" % buffer

a=raw_input("send to server:")

iflen(a):

client.send(a)

如上為基本的實現tcp/udp實現socket同學的基礎用法,我寫了乙個可選tcp/udp socket通訊的的例項**在github,原始碼位址為:socket通訊

enjoytoday,enjoycoding

Android中socket通訊的簡單使用

程式在模擬器上能接收到訊息,但是在真機上接收不到 例子1客戶端傳送資訊,伺服器端輸出資訊到輸出台上 核心 客戶端 this.button.setonclicklistener new onclicklistener catch exception e finally catch ioexceptio...

socket中pack 和 unpack 的使用

任何一款擁有socket操作能力的語言都有乙個專門用於組包的函式,php也不例外 用了很久php了卻很少有機會用php進行一些二進位制操作。最近用php寫乙個socket客戶端連線乙個用c 語言開發的遊戲服務端。伺服器端開發人員使用了二進位制的形式來定義協議的格式。協議格式如下 包頭 2bytes ...

python中OrderedDict的使用

很多人認為python中的字典是無序的,因為它是按照hash來儲存的,但是python中有個模組collections 英文,收集 集合 裡面自帶了乙個子類 ordereddict,實現了對字典物件中元素的排序。請看下面的例項 import collections print regular dic...