问题描述
我正在为任务建立客户端-服务器连接。服务器基本上运行一切,客户端只接收来自服务器的消息,并在服务器需要时做出响应。
出于某种原因,我无法构建一个反复监听然后响应的客户端。
我以为我可以只听 socket.recv()
,结果只是停止了一切。
这是我经过一些调整后得到的结果(对于客户):
import socket
HOST = 'localhost'
PORT = 65432
conn = socket.socket(socket.AF_INET,socket.soCK_STREAM)
conn.connect((HOST,PORT))
conn.setblocking(False)
while True :
try :
msg_lgn = len(conn.recv(1024,socket.MSG_PEEK))
server_message = conn.recv(1024).decode()
print('Server Sent:\n' + server_message)
if server_message == 'exit':
break
except :
conn.send(input().encode())
conn.close()
我将其设置为非阻塞,因此它不会挂在 conn.recv()
上并继续在异常中输入,但随后它只是冻结在输入上。
每次 recv() 什么都没有时,服务器是否关闭连接?为什么会这样?
我只希望客户端在服务器发送消息时接收消息,当服务器不发送时,客户端将向服务器发送它的输入。
希望得到任何帮助! 利多
编辑:服务器文件要大得多,所以我会展示重要的部分。
#imported some classes for the game itself also (that i've created),but has nothing to do with the problem
import socket
import time
import threading
def startGame(conn):
#this is where the servers sends the questions and receives answer (pretty basic send and recv)
# Establish Client-Server Connection
HOST = 'localhost' # Standard loopback interface address (localhost)
PORT = 65432 # Port to listen on (non-privileged ports are > 1023)
s = socket.socket(socket.AF_INET,socket.soCK_STREAM)
s.bind((HOST,PORT))
s.listen(3)
# Use Threading to start the game for an new player
while True:
if playerCount < 3:
(conn,addr) = s.accept()
playerCount += 1
x = threading.Thread(target=startGame,args=(conn,))
x.start()
# Close Server Socket
s.close()
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)