2013-12-23 146 views
0

我的問題是我第一次使用應用程序異步 它連接的和工作TCP客戶端連接到服務器,但是當我斷開,並連接它再次將數據發送兩個時間像 S8 S8TCP客戶端,請不要斷開

連接代碼


   constatus.Text = "Connecting....."; 
       // newsock = null; 
       newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
       //IPEndPoint iep = new IPEndPoint(IPAddress.Any, 20); 
       IPEndPoint iep = new IPEndPoint(IPAddress.Parse(textBox2.Text), Convert.ToInt16(textBox3.Text)); 
       newsock.BeginConnect(iep, new AsyncCallback(Connected), newsock);   

數據發送代碼


  if (!InvokeRequired) 
      { 
       try 
       { 
        byte[] message = Encoding.ASCII.GetBytes(Allinput_Command); 
        client.BeginSend(message, 0, message.Length, SocketFlags.None, new AsyncCallback(SendData), client); 
       } 
       catch (Exception) { }     
      } 
      else 
      { 
       Invoke(new ThreadStart(data_send)); 
      } 

斷開代碼


client.Close(); 
timer.Stop(); 
timer1.Stop(); 

請告訴我正確的道路,解決這個.... 我可以給我的代碼,如果有人告訴我解決

+0

回到我的記憶......如果你想關閉TCPClient,你必須調用:newsock.EndConnect,嘗試添加這個 – User2012384

回答

1

在你開始編寫任何使用TCP的代碼之前,確保你有一個speci爲TCP協議分層。否則,不可能修復這樣的錯誤。一旦你有一個規範,很容易:

  1. 發送程序是否遵循規範?如果不是這樣,那就錯了。

  2. 接收程序是否符合規範?如果不是這樣,那就錯了。

  3. 如果兩個程序都遵循規範並且通信仍然不起作用,那麼規範就會被破壞。

我敢打賭,你認爲你發送消息,但你實際上是發送字節。如果你想發送消息,你需要一個規範來解釋消息開始和結束的位置,發送者和接收者都必須遵循該規範。

+0

是的,我正在以Bytes David Schwartz的形式發送數據,我可以將我的代碼發送給你。 – user2589387