TCP运行只能访问一次。

哪位大佬能麻烦看一下为什么这段TCP代码只能访问一次吗?在第一次访问之后就开始无限转圈,多谢。

import socket

class server:
    def start(self):
        self.server=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.server.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,True)
        self.server.bind(('10.10.124.88',8080))
        self.server.listen(128)

    def recv(self):
        while True:
            self.client=self.server.accept()[0]
            address=self.server.accept()[1]
            data=self.client.recv(1024).decode()
            print(address,'   online')
            if not data:
                print(address,'   offline')

            else:
                self.permit()

            self.client.close()

    def permit(self):
        res_line='HTTP/1.1 200 OK,GOON\n'
        res_head='Server:caoan cool\n'
        res_space='\n'

        file=open('HTML/bata.html', 'r')
        res_main=file.read()

        res=res_line+res_head+res_space+res_main
        self.client.send(res.encode())








    def main(self):

        self.start()
        self.recv()
        self.server.close()

a=server()
a.main()

 

服务器端应该启用线程处理接收数据,而不是用一个死循环来替换。把接收的代码放到线程里面就可以了。

问题是别的代码没办法同时运行了,程序死在哪里什么也做不了了

开2个线程,一个线程发送数据,一个线程接收数据,接收数据线程被阻塞后,发送数据线程仍然是“活跃的”。接收线程被阻塞的原因是recv()方法会一直等待对方发送数据,如果对方没有发数据过来,看到的效果就是一致被阻塞的。可参考https://blog.csdn.net/juzicode00/article/details/109583670

您好,我是有问必答小助手,你的问题已经有小伙伴为您解答了问题,您看下是否解决了您的问题,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632