python socket之tcp服務器與客戶端示例

jopen 9年前發布 | 2K 次閱讀 Python

作者:vpoet

日期:夏季


server:

    # -- coding: cp936 --
'''
建立一個python server,監聽指定端口,
如果該端口被遠程連接訪問,則獲取遠程連接,然后接收數據,
并且做出相應反饋。
'''
import socket

if __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()  </pre> 


client:

    import sys  
    if __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()    

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!