Python套接字客户端无法重新连接
我有两个按钮。连接和断开。第一次按下connect时,客户端成功连接到服务器(localhost:4106),按下disconnect时,客户端断开连接。 我的问题是,当我再次按下“连接”时,客户端将不会重新连接到服务器,我会收到一条错误消息: 我认为这是因为套接字连接不能重复使用?有解决办法吗?谢谢Python套接字客户端无法重新连接,python,sockets,Python,Sockets,我有两个按钮。连接和断开。第一次按下connect时,客户端成功连接到服务器(localhost:4106),按下disconnect时,客户端断开连接。 我的问题是,当我再次按下“连接”时,客户端将不会重新连接到服务器,我会收到一条错误消息: 我认为这是因为套接字连接不能重复使用?有解决办法吗?谢谢 #!/usr/bin/python import socket import Tkinter import tkMessageBox top
#!/usr/bin/python
import socket
import Tkinter
import tkMessageBox
top = Tkinter.Tk()
s = socket.socket()
host = '127.0.0.1'
port = 4106
def connect():
s.connect((host, port))
def disconnect():
s.close()
ConnectBtn = Tkinter.Button(top, text ="Connect", command = connect)
DisconnectBtn = Tkinter.Button(top, text ="Disconnect", command = disconnect)
ConnectBtn.pack()
DisconnectBtn.pack()
top.mainloop()
我不知道如何用python重写这段代码tcl/tk,但这可能是解决方案的良好开端。此代码显示了如果连接丢失,客户端将如何自动重新连接到服务器 我使用with success自动重新连接到服务器此代码:
def open_connection():
data0=''
try:
# Create a TCP/IP socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
# Connect the socket to the port where the server is listening
server_address = ('192.168.0.100', 8000)
sock.settimeout(10) # TimeOut 5 secunde
while True:
try:
sock.connect(server_address)
message = 'new connection'
sock.sendall(message)
# Look for the response
amount_received = 0
data0=sock.recv(1024)
amount_received = len(data0)
return
finally:
wNET = 0
pass
except:
sock.close()
time.sleep(60)
del data0
在connect中再次调用socket.socket(),并将s分配给新套接字。在disconnect()中进行检查,确保它是一个有效的打开的套接字,然后再关闭它;在
connect()
函数中使用s=socket.socket()
,并将代码顶部的s
声明替换为s=0
。您还可以使用disconnect()
函数来关闭套接字(仅当它是有效套接字时),方法是检查其值是否为0
,并使函数在成功断开连接后将其值设置为0
。我认为这是有道理的。