標籤:python socket
python socket之tcp伺服器與用戶端demo
作者:vpoet
日期:夏季
server:
# -*- coding: cp936 -*-'''建立一個python server,監聽指定連接埠,如果該連接埠被遠端連線訪問,則擷取遠端連線,然後接收資料,並且做出相應反饋。'''import socketif __name__=="__main__": 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(10) #獲得一個串連,然後開始迴圈處理這個串連發送的資訊 ''' 如果server要同時處理多個串連,則下面的語句塊應該用多線程來處理, 否則server就始終在下面這個while語句塊裡被第一個串連所佔用, 無法去掃描其他新串連了,但多線程會影響代碼結構,所以記得在串連數大於1時 下面的語句要改為多線程即可。 ''' while True: buf = connection.recv(1024) print "Get value " +buf print "\n\n" if buf=="q": print "exit server\n\n" break except socket.timeout: #如果建立串連後,該串連在設定的時間內無資料發來,則time out print 'time out' print "closing one connection" #當一個串連監聽迴圈退出後,串連可以關掉 connection.close()
client:
import sysif __name__=="__main__": import socket sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect(('localhost', 8001)) import time while True: time.sleep(3) flag=raw_input("Please input send flag:") if flag=="q": break sock.send(flag) sock.close()
運行:
python socket之tcp伺服器與用戶端demo