2012-10-13 90 views
7

我正在开发的应用程序,其中c尖锐服务器与Android客户端进行通信。 服务器需要向Android tcpClient发送多条消息。至于发送消息,我必须关闭服务器上的tcpClient对象。否则它不会发送。一旦tcpClient被关闭,我怎么能再次与我的客户端通信,我如何跟踪和发送多个消息,一旦我关闭tcpClient,或者有任何其他方式发送而不关闭它。 如果问题仍不清楚,请在下方发送多条消息从TCP服务器到客户端(C尖锐到Android)

它发送一个消息easlity发表评论,但我需要不时地发送更多的消息时

这里是代码服务器

//in a thread 
void receivingMessages(object param) 
    { 
     try 
     { 
      var paramArray = (object[])param; 
      var id = paramArray[0]; 
      var client = paramArray[1] as TcpClient; 

      var stream = client.GetStream(); 

      while (true) 
      { 
       byte[] buffer = new byte[2048]; 
       int bytesRead = stream.Read(buffer, 0, 2048); 

       if (bytesRead > 0) 
       { 
        StringBuilder sb = new StringBuilder(); 
        string v = Encoding.ASCII.GetString(buffer); 

        int index = v.IndexOf('\0'); 
        string trimmedXml = v.TrimEnd(new char[] { '\0' }); 

        var root = XDocument.Parse(trimmedXml).Root; 
        //to get the type of xml like it is login register or message 
        string xmlType = root.Name.ToString(); 

        //some checks  
        string result = " server messages"; 
        SendMessage(client, result); 

       } 

       //Thread.Sleep(10); 
      } 
     } 
     catch (Exception) 
     { 

     } 

    } 


    public void SendMessage(TcpClient client, string message) 
    { 

     byte[] buffer = Encoding.ASCII.GetBytes(message); 

     NetworkStream stream = client.GetStream(); 
     stream.Write(buffer, 0, buffer.Length); 

     client.Close(); 
    } 
} 
} 

回答

3

片断试试这个:

public void SendMessage(TcpClient client, string message) 
{ 

    //byte[] buffer = Encoding.ASCII.GetBytes(message); 

    NetworkStream stream = client.GetStream(); 
    StreamWriter writer = new StreamWriter(stream); 
    writer.WriteLine(message); 
    writer.Flush(); 

} 
+0

哪个问题会解决这个? –

+0

@LB在我听起来像他没有能够发送消息没有关闭流,但他想保持打开:“有没有发送任何方式没有关闭...”,所以我重写它写该消息,没有关闭。 –

+0

@ 0 _______ 0仍然无法发送消息,除非我关闭它tcpclient –

相关问题