前一段時間學習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...