2012-10-21 137 views
0

我有两个按钮。连接和断开。当第一次按连接时,客户端成功连接到服务器(localhost:4106),当按下断开连接时,客户端断开连接。 我的问题是,当我再次按下“连接”,客户端将不会重新连接到服务器,我收到一条错误消息:http://i.imgur.com/dkvos.pngPython套接字客户端无法重新连接

我认为这是由于套接字连接无法重新使用?有没有解决方法?谢谢

#!/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() 
+1

呼叫socket.socket(),并指定s到一个新的套接字。在关闭它之前,检查disconnect()以确保它是一个有效的开放套接字。 – engineerC

+1

插座不能重复使用;在connect()函数中使用's = socket.socket()',并将代码顶部的's'声明替换为's = 0'。你也可以使用你的'disconnect()'函数关闭套接字,只有当它是一个有效的套接字时,通过检查它的值是否为'0',并且一旦它成功地断开连接,它就会将它的值设置为'0'。我认为这是有道理的。 – Archimaredes

回答

-1

我不知道如何在Python中重写此代码tcl/tk,但可以是一个解决方案的好开始。 Here is the code shared by Scott Nichols。此代码显示如果客户端连接丢失,客户端将能够自动重新连接到服务器。

我成功了自动重新连接到服务器的代码使用方法:再次连接

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 
相关问题