在Python中重启套接字服务器

2 投票
2 回答
7601 浏览
提问于 2025-04-17 17:06

我用Python写了一个简单的套接字服务器(在OS X上)。我希望当客户端结束通信时,服务器能够重启,这样客户端就可以重新连接到服务器。请看下面的代码,我在“失去联系”的那个IF语句里需要做什么?我对Python完全是新手。

以下是代码:

import socket              
import os

s = socket.socket()       
host = socket.gethostname() 
port = 5555               


os.system('clear') 
print 'Server started'
print 'Waiting'

s.bind((host, port))       
s.listen(5)                 
c, addr = s.accept()     
print 'Contact', addr   
while True:
    msg = c.recv(1024)
    if not msg:
       s.close
       print "Lost contact"
       exit ()
    else: 
       print msg 

2 个回答

0

如果我理解没错的话,你是想在客户端断开连接时再次进行监听,这段代码应该能帮你实现这个功能:

import socket              
import os

s = socket.socket()       
host = socket.gethostname() 
port = 5555               


os.system('clear') 
print 'Server started'
print 'Waiting'

def server():
  s.bind((host, port))       
  s.listen(5)                 
  c, addr = s.accept()     
  print 'Contact', addr   
  while True:
      msg = c.recv(1024)
      if not msg:
         s.close
         print "Restarting..."
         server()
      else: 
         print msg
1

我不知道你是否找到了解决办法,但我在寻找同样的问题时发现了这个。我当时想在服务器上重置套接字,以便可以连接下一个客户端,所以我尝试使用socket.close(),然后重新初始化整个套接字。但其实你在服务器端不需要做任何事情,只需在客户端使用socket.close(),这样另一个客户端就可以连接,而不会影响服务器。(我知道这可能现在对你帮助不大,但如果其他人也遇到我遇到的问题,我希望他们能知道这一点。)

撰写回答