2012-10-13 27 views
7

Tôi đang phát triển một ứng dụng, trong đó c máy chủ sắc nét giao tiếp với khách hàng Android. Máy chủ cần gửi nhiều thư đến tcpClient của Android. Để gửi tin nhắn, tôi phải đóng đối tượng tcpClient trên máy chủ. bằng không nó không gửi. Khi tcpClient được đóng lại, tôi có thể liên lạc với khách hàng như thế nào, làm cách nào tôi có thể theo dõi và gửi nhiều thư, khi tôi đóng tcpClient, hoặc có cách gửi khác mà không đóng nó. Nếu câu hỏi vẫn còn chưa rõ ràng, xin vui lòng bình luận bên dướigửi nhiều tin nhắn từ máy chủ TCP đến máy khách (C sharp tới Android)

nó sẽ gửi một easlity nhắn nhưng tôi cần phải gửi tin nhắn khác bất cứ lúc nào

Dưới đây là đoạn mã cho máy chủ

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

Trả lời

3

Hãy thử điều này:

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

Vấn đề này sẽ giải quyết được vấn đề gì? –

+0

@LB Nghe có vẻ như tôi đã không thể gửi tin nhắn mà không đóng luồng, nhưng anh ấy muốn giữ nó mở: "có cách nào để gửi mà không đóng ..." vì vậy tôi viết lại nó để viết tin nhắn, mà không đóng. –

+0

@ 0 _______ 0 vẫn không thể gửi tin nhắn, trừ khi tôi đóng nó tcpclient –