簡體   English   中英

Python:重新連接客戶端套接字

[英]Python: reconnect client socket

如何與客戶端套接字重新連接到同一服務器套接字? SO上也有類似的問題(仍然是無法接受的答案)。

我的服務器端看起來像這樣

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

現在,客戶端成功地向服務器進行了兩次傳輸並獲得了響應。 但是,我不能兩次運行客戶端腳本...服務器似乎沒有得到任何輸入,因此客戶端沒有得到響應。 我以為這是有可能的,因為我在腳本末尾關閉了客戶端的套接字,因此服務器端一定有事情發生(或沒有發生)。 我應該在while循環內在服務器中執行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()

因此,無論何時客戶端殺死套接字,服務器都會接受新的連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM