gpt4 book ai didi

Python 套接字 - 让套接字保持事件状态?

转载 作者:可可西里 更新时间:2023-11-01 02:31:59 24 4
gpt4 key购买 nike

我在使用 Python 中的套接字时遇到了一些麻烦。每当有人连接它工作正常但如果他们断开服务器程序关闭。我希望服务器程序在客户端关闭后保持打开状态。我正在使用 while True 循环来保持连接有效,但是一旦客户端关闭连接,服务器就会关闭它的连接。

这是客户端:

import socket, sys
conn = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = sys.argv[1]
port = int(sys.argv[2])
conn.connect((host, port))

print("Connected to host " + sys.argv[1])
td = 1
while td == 1:
msg = raw_input('MSG: ')

这是服务器:

import socket, sys

socket.setdefaulttimeout(150)
host = ''
port = 50005
socksize = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host, port))
print("Server started on port: %s" % port)
s.listen(1)
print("Now listening...\n")
conn, addr = s.accept()

while True:
print 'New connection from %s:%d' % (addr[0], addr[1])
data = conn.recv(socksize)
if not data:
break
elif data == 'killsrv':
conn.close()
sys.exit()
else:
print(data)

最佳答案

如果客户端关闭连接,您希望它关闭套接字。

这里似乎有点脱节,我将尝试详细说明。当您创建套接字、绑定(bind)和监听时,您就为其他人打开了大门并与您建立联系。

一旦客户端连接到您,并且您使用 accept() 调用接受连接并获得一个新的套接字 (conn),它将返回给您与客户互动。您原来的监听套接字仍然存在并处于事件状态,您仍然可以使用它来接受更多新连接。

看看你的代码,你可能想做这样的事情:

while True:
print("Now listening...\n")
conn, addr = s.accept()

print 'New connection from %s:%d' % (addr[0], addr[1])
data = conn.recv(socksize)
if not data:
break
elif data == 'killsrv':
conn.close()
sys.exit()
else:
print(data)

请注意,这只是一个起点,正如其他人所建议的那样,您可能希望使用 select() 以及 fork 进程或生成线程来为每个客户端提供服务。

关于Python 套接字 - 让套接字保持事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5110911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com