如何使用客户端套接字重新连接到同一服务器套接字?有一个类似的问题在SO上有一个vage(仍然是不可接受的答案)。
我的服务器端看起来像这样
import socket
TCP_IP = '192.168.0.12'
TCP_PORT = 28478
BUFF_SZE = 1024
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_socket.settimeout(10)
my_socket.bind((TCP_IP, TCP_PORT))
my_socket.listen(1)
con, addr = my_socket.accept()
while 1:
data = con.recv(BUFF_SZE)
if data:
print(data.decode())
con.send(("world").encode()
con.close()
我的客户端看起来像这样
import socket
TCP_IP = "192.168.0.12"
TCP_PORT = 28478
BUFF_SZE = 1024
sckt = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sckt.connect((TCP_IP, TCP_PORT))
MSG = "Hello"
sckt.send(MSG.encode())
data = sckt.recv(BUFF_SZE)
print(data.decode())
MSG = "Again"
sckt.send(MSG.encode())
data = sckt.recv(BUFF_SZE)
print(data.decode())
sckt.close()
现在,客户端成功地向服务器发送了两个传输并获得响应。但是,我无法运行客户端脚本两次...服务器似乎没有得到任何输入,因此客户端没有得到响应。
我认为这是可能的,因为我在脚本末尾关闭客户端的套接字,所以必须在服务器端发生(或不发生)某些事情。
我应该在循环中在服务器内进行my_socket.accept()
吗?
答案 0 :(得分:0)
@Barmar评论后,将服务器端更改为以下内容
import socket
TCP_IP = '192.168.0.12'
TCP_PORT = 28478
BUFF_SZE = 1024
my_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_socket.settimeout(10)
my_socket.bind((TCP_IP, TCP_PORT))
my_socket.listen(1)
con, addr = my_socket.accept()
while 1:
data = con.recv(BUFF_SZE)
if data:
print(data.decode())
con.send(("world").encode()
if not data:
con, addr = my_socket.accept()
con.close()
因此,只要客户端杀死套接字,服务器就会接受新的连接。