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

时间:2017-10-02 19:52:27

标签: python sockets

如何使用客户端套接字重新连接到同一服务器套接字?有一个类似的问题在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()吗?

1 个答案:

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

因此,只要客户端杀死套接字,服务器就会接受新的连接。