2012-10-13 12 views
7

Sto sviluppando un'applicazione, in cui il server c sharp comunica con il client Android. Il server deve inviare più messaggi a Android tcpClient. Per inviare un messaggio devo chiudere l'oggetto tcpClient sul server. altrimenti non spedisce. Una volta chiuso tcpClient, come posso comunicare nuovamente con il mio cliente, come posso tenere traccia e inviare più messaggi, una volta che chiudo tcpClient, o c'è un altro modo di inviarlo senza chiuderlo. Se la domanda è ancora chiaro, si prega di commento qui sottoinvia più messaggi dal server TCP al client (da C sharp a Android)

si invia un messaggio easlity ma ho bisogno di inviare più messaggi di volta in volta

Ecco il frammento di codice per il server

//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(); 
    } 
} 
} 

risposta

3

Prova questo:

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

Quale problema risolverebbe? –

+0

@LB A me sembra che non sia stato in grado di inviare il messaggio senza chiudere il flusso, ma vuole tenerlo aperto: "c'è un modo di inviare senza chiudere ..." quindi l'ho riscritto per scrivere il messaggio, senza chiusura. –

+0

@ 0 _______ 0 non riesco ancora a inviare messaggi, a meno che non lo chiudi tcpclient –

Problemi correlati