我正在尝试学习如何在python中使用Socket,但目前存在一个问题,可以连接它,但是我希望我的套接字服务器在客户端发送了应该发送的内容后保持打开状态。我可以成功发送一些内容,但是在此之后,整个服务器都将关闭。我希望它保持打开状态,以便客户端可以随时重新连接。
我的client.py
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("192.168.0.127", 12345))
f = open("bce7d09d-66ce-46ca-979e-777c4cbc0cd1.json", "wb")
while True:
datas = s.recv(1024)
while datas:
f.write(datas)
datas = s.recv(1024)
f.close()
socket.shutdown()
print("Done receiving")
我的server.py
import socket
import subprocess
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("192.168.0.127", 12345))
s.listen(10)
c, addr = s.accept()
print('{} connected.'.format(addr))
f = open("bce7d09d-66ce-46ca-979e-777c4cbc0cd1.json", "rb")
datas = f.read(1024)
while datas:
c.send(datas)
datas = f.read(1024)
f.close()
print("Done sending...")
答案 0 :(得分:1)
由于s.accept()
是阻止呼叫,因此您可以执行以下操作:
while True:
c, addr = s.accept()
...
继续接受服务器的新套接字连接。
答案 1 :(得分:1)
尝试将accept
置于循环中:
import socket
import subprocess
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("192.168.0.127", 12345))
s.listen(10)
while True:
c, addr = s.accept()
print('{} connected.'.format(addr))
with open("bce7d09d-66ce-46ca-979e-777c4cbc0cd1.json", "rb") as f:
datas = f.read(1024)
while datas:
c.send(datas)
datas = f.read(1024)
print("Done sending...")