2013-12-23 147 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