国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python簡單實現socket信息發送與監聽功能示例

2020-02-16 11:26:59
字體:
來源:轉載
供稿:網友

本文實例講述了Python簡單實現socket信息發送與監聽功能。分享給大家供大家參考,具體如下:

最近在研究boost C++庫,用于工作中處理大規模高并發TCP連接數據響應,想測試,也可以用boost::asio庫來寫,但不利于測試代碼的靈活修改。

于是就研究了一下python怎么做。學習過程中看到網上給出的代碼示例雖然很基礎易懂,對于python零基礎的人來說,完全可以稍微復雜些,配上一些注釋,就能更多掌握一些socket和python的基本語法知識。

于是根據我的使用需要,修改python的socket server和client的范例代碼如下:

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()            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 沙坪坝区| 盐亭县| 房山区| 丹凤县| 秀山| 栖霞市| 滦南县| 柳河县| 凤翔县| 泰州市| 靖江市| 白山市| 尖扎县| 桓仁| 镇远县| 岳普湖县| 景泰县| 石台县| 湘西| 桑日县| 平度市| 讷河市| 富民县| 汕头市| 弥勒县| 会理县| 南溪县| 武山县| 马龙县| 彩票| 景宁| 革吉县| 泗阳县| 祁阳县| 定兴县| 勃利县| 东兰县| 徐汇区| 乌恰县| 开远市| 随州市|