如何使用客户端套接字重新连接到同一服务器套接字?有一个类似的问题,所以有一个愤怒的问题(仍然没有得到答案)。
我的服务器端看起来像
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()
吗?
@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()
因此,每当客户端杀死套接字时,服务器都会接受新的连接。