您好,登錄后才能下訂單哦!
本篇文章為大家展示了怎么在Python中利用socket發送信息,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
server端(單線程)
# -*- coding: cp936 -*- ''''' 建立一個python server,監聽指定端口, 如果該端口被遠程連接訪問,則獲取遠程連接,然后接收數據, 并且做出相應反饋。 ''' if __name__=="__main__": import socket print "Server is starting" sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.bind(('localhost', 8001)) #配置soket,綁定IP地址和端口號 sock.listen(5) #設置最大允許連接數,各連接和server的通信遵循FIFO原則 print "Server is listenting port 8001, with max connection 5" while True: #循環輪詢socket狀態,等待訪問 connection,address = sock.accept() try: connection.settimeout(50) #獲得一個連接,然后開始循環處理這個連接發送的信息 ''''' 如果server要同時處理多個連接,則下面的語句塊應該用多線程來處理, 否則server就始終在下面這個while語句塊里被第一個連接所占用, 無法去掃描其他新連接了,但多線程會影響代碼結構,所以記得在連接數大于1時 下面的語句要改為多線程即可。 ''' while True: buf = connection.recv(1024) print "Get value " +buf if buf == '1': print "send welcome" connection.send('welcome to server!') elif buf!='0': connection.send('please go out!') print "send refuse" else: print "close" break #退出連接監聽循環 except socket.timeout: #如果建立連接后,該連接在設定的時間內無數據發來,則time out print 'time out' print "closing one connection" #當一個連接監聽循環退出后,連接可以關掉 connection.close()
client端,每隔3秒輪番發送不同的數據給server:
if __name__=="__main__": import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('localhost', 8001)) import time flag = '1' while True: time.sleep(3) print 'send to server with value: '+ flag sock.send(flag) print sock.recv(1024) flag = (flag=='1') and '2' or '1' #change to another type of value each time sock.close()
執行上面兩段代碼后,可以得到如下結果:
先執行server.py:
C:\Users\YanBo>D:\server.py Server is starting Server is listenting port 8001, with max connection 5
執行client后:
C:\Users\YanBo>D:\client.py send to server with value: 1 welcome to server! send to server with value: 2 please go out! send to server with value: 1 welcome to server! send to server with value: 2 please go out! .....
server則相應輸出:
Get value 1 send welcome Get value 2 send refuse .....
如果在linux下,用
$ lsof -i:8001
則可以列出正在執行的server和client進程,因為他們占用了端口8001
yanbo@yanbo-linux64-01:~$ lsof -i:8001 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME python 2413 yanbo 3u IPv4 12907 0t0 TCP localhost:8001 (LISTEN) python 2413 yanbo 4u IPv4 12910 0t0 TCP localhost:8001->localhost:38609 (ESTABLISHED) python 2469 yanbo 3u IPv4 12222 0t0 TCP localhost:38609->localhost:8001 (ESTABLISHED)
上述內容就是怎么在Python中利用socket發送信息,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。