![](/img/trans.png)
[英]how to handle tcp client socket auto reconnect in python asyncio?
[英]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.