Socket tcp server接收数据怎么结束?

小弟在学习python socket模块的过程中,写了一个接收信息的简易服务器,使用socke.recv(10)通过循环接收一个长字符串,并把所有数据拼接起来,但是无法退出while循环,请大神帮助一下。


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)  # 创建socket
        sever.bind((self.ip, self.port))  # 绑定port,ip,接收的是一个元组
        sever.listen(1)  # 开始监听
        client, address = sever.accept()  # 接收Tcp 链接,并返回建立的新的套接字与地址
        temp=b''
        info = client.recv(10)
        while info:
            temp+=info
            print(temp)#验证temp
            info=client.recv(10)
        #此处循环无法退出
    sever.close()
阅读 8.1k
3 个回答

问题应该是while info的判断,可以把info打出来看下,为啥没法终止,是不是等于exit

另外建议优化如下:
服务器循环这块,修改下逻辑,建议使用多线程方式。否则,单线程在处理连接的过程中,无法接受其他客户端的连接。

while True:
    # 接受一个新连接:
    sock, addr = s.accept()
    # 创建新线程来处理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

tcp的连接方式,应该由客户端断开连接,服务器应当保持连接等待下一次连接进来

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

我的猜测是可能你的客户端没有断开连接,所以导致server这边阻塞在了recv函数,并不是一直在进行while循环

推荐问题