在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ Socket tcp server接收數(shù)據(jù)怎么結(jié)束?

Socket tcp server接收數(shù)據(jù)怎么結(jié)束?

小弟在學習python socket模塊的過程中,寫了一個接收信息的簡易服務器,使用socke.recv(10)通過循環(huán)接收一個長字符串,并把所有數(shù)據(jù)拼接起來,但是無法退出while循環(huán),請大神幫助一下。


import socket


class Server(object):
    def __init__(self, ip, port):
        self.ip = ip
        self.port = port
    
    # 初始化服務器
    def config(self):
        sever = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 創(chuàng)建socket
        sever.bind((self.ip, self.port))  # 綁定port,ip,接收的是一個元組
        sever.listen(1)  # 開始監(jiān)聽
        client, address = sever.accept()  # 接收Tcp 鏈接,并返回建立的新的套接字與地址
        temp=b''
        info = client.recv(10)
        while info:
            temp+=info
            print(temp)#驗證temp
            info=client.recv(10)
        #此處循環(huán)無法退出
    sever.close()
回答
編輯回答
初念

tcp的連接方式,應該由客戶端斷開連接,服務器應當保持連接等待下一次連接進來

2018年1月2日 01:56
編輯回答
葬憶

你可以每次把info打印出來看一下值

我的猜測是可能你的客戶端沒有斷開連接,所以導致server這邊阻塞在了recv函數(shù),并不是一直在進行while循環(huán)

2017年10月25日 19:58
編輯回答
陌上花

問題應該是while info的判斷,可以把info打出來看下,為啥沒法終止,是不是等于exit

另外建議優(yōu)化如下:
服務器循環(huán)這塊,修改下邏輯,建議使用多線程方式。否則,單線程在處理連接的過程中,無法接受其他客戶端的連接。

while True:
    # 接受一個新連接:
    sock, addr = s.accept()
    # 創(chuàng)建新線程來處理TCP連接:
    t = threading.Thread(target=tcplink, args=(sock, addr))
    t.start()
    
def tcplink(sock, addr):
    print 'Accept new connection from %s:%s...' % addr
    sock.send('Welcome!')
    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if data == 'exit' or not data:
            break
        sock.send('Hello, %s!' % data)
    sock.close()
    print 'Connection from %s:%s closed.' % addr
2018年1月5日 20:21