我有幾個測試客戶端每次都遇到相同的問題。客戶端可以連接,並且可以發送他們的第一條消息,但是之後服務器停止響應該客戶端。我懷疑問題與s.accept()有關,但我不確定究竟是什麼錯誤或如何解決它。Python服務器故障
def startServer():
host = ''
port = 13572
backlog = 5
size = 1024
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port))
s.listen(backlog)
print "Close the command prompt to stop Gamelink"
while 1:
try:
client, address = s.accept()
data = client.recv(size)
if data:
processData(data)
client.send("OK")
else:
print "Disconnecting from client at client's request"
client.close()
except socket.error, (value, message):
if s:
print "Disconnecting from client, socket issue"
s.close()
print "Error opening socket: " + message
break
except:
print "Gamelink encountered a problem"
break
print "End of loop"
client.close()
s.close()
服務器旨在通過本地網絡訪問,並且它需要重量輕,非常迅速作出反應,因此,如果另一個實現(如基於線程)將是滿足這些要求的更好,請讓我知道。預期的應用是用作遠程遊戲鍵盤,因此需要低資源使用和高速度。
你應該把'accept'放在循環之外。此外,該服務器將只接受一個連接。如果你想要一個服務於多個客戶端的真實服務器,你需要多路複用連接,比如使用'select'或'poll'。 – Keith
一個連接實際上對我所要做的事情來說是完美的,它看起來像解決了我的問題。謝謝! –