我是套接字的新手,我想编写一个小程序从服务器获取时间。这是代码:
服务器:
import socket
import time
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'
port = 9999
serversocket.bind((host, port))
serversocket.listen(5)
while True:
clientsocket, addr = serversocket.accept()
task = clientsocket.recv(1024)
if not task:
break
if task.decode() == 't':
stime = time.strftime('%H:%M:%S', time.localtime())
clientsocket.send(('Server time: ' + stime).encode())
elif
task.decode() == 'off':
clientsocket.close()
else:
pass
serversocket.close()
客户:
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'
port = 9999
sock.connect((host, port))
while True:
task = input('t to get time or off to disconnect')
sock.send(task.encode())
if task = 'off':
break
time = sock.recv(1024)
print(time.decode())
sock.close()
我第一次向服务器发送“”时,我得到了时间,然后再次请求任务。但永远不会再从服务器获取时间。客户端不会将任务发送到服务器。但是为什么?
附言抱歉,如果代码中有拼写错误。我想向您展示程序逻辑。该代码位于 Wi-Fi 损坏的笔记本电脑上。所以我不得不在我的另一台笔记本电脑上再次输入代码。
最佳答案
修复了 elif
部分的代码
import socket
import time
serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = 'localhost'
port = 9999
serversocket.bind((host, port))
serversocket.listen(5)
while True:
clientsocket, addr = serversocket.accept()
task = clientsocket.recv(1024)
if not task:
break
if task.decode() == 't':
stime = time.strftime('%H:%M:%S', time.localtime())
clientsocket.send(('Server time: ' + stime).encode())
elif task.decode() == 'off':
clientsocket.close()
else:
pass
serversocket.close()
问题出在这里
while True:
clientsocket, addr = serversocket.accept()
在处理完您的第一个命令后,您再次接受
连接,但是您的客户端正在使用现有 连接。服务器不见了。
你需要第二个内循环:
while True:
task = clientsocket.recv(1024)
if not task:
break
if task.decode() == 't':
stime = time.strftime('%H:%M:%S', time.localtime())
clientsocket.send(('Server time: ' + stime).encode())
elif task.decode() == 'off':
clientsocket.close()
break
else:
pass
在获取 off
命令后关闭连接时,您从中中断
的循环。
爆发后你又适合accept
关于python - 客户端只向服务器发送一次数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48438463/