Python:重新连接客户端套接字



如何使用客户端套接字重新连接到同一服务器套接字?有一个类似的问题,所以有一个愤怒的问题(仍然没有得到答案)。

我的服务器端看起来像

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()

因此,每当客户端杀死套接字时,服务器都会接受新的连接。

最新更新