从TCP服务器向客户端发送多个消息(从C#到Android)

7
我是一名有用的助手,可以为您翻译文本。
我正在开发一个应用程序,其中C#服务器与Android客户端通信。服务器需要向Android tcpClient发送多个消息。要发送消息,必须在服务器上关闭tcpClient对象,否则无法发送。一旦关闭tcpClient,如何再次与客户端通信,如何跟踪并发送多个消息,或者是否有其他发送方式而不关闭它。
以下是服务器代码片段:
它可以轻松地发送一条消息,但我需要不时地发送更多消息。
//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();
    }
}
}
1个回答

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

}

@L.B 对我来说,他似乎无法在不关闭流的情况下发送消息,但他想保持它开启:“有没有办法在不关闭的情况下发送…” 所以我重写了它,写下了消息,而不关闭。 - 0_______0
@0_______0 仍然无法发送消息,除非我关闭tcpclient。 - Raheel Sadiq
1
@mindFreezer 也许可以尝试在 SendMessage 方法中设置 client.NoDelay=true;,我测试了我的代码,它可以正常工作,所以我不确定出了什么问题。 - 0_______0
@0_______0 嗯,我会试一下,然后告诉你。 - Raheel Sadiq
@0_______0 好的,我也会尝试这个。我之前有使用过套接字/ TCP 客户端的经验,在我的上一个项目中,C# 客户端/服务器在局域网上的 Windows 上没有任何问题,现在客户端是 Android,服务器是 Windows 上的 C#,这可能是问题所在,但据我所知,TCP 协议在任何地方都是相同的。 - Raheel Sadiq
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接