2012-10-21 171 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 
相關問題