本文實例講述了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()            
新聞熱點
疑難解答