哪位大佬能麻烦看一下为什么这段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