8

CシャープサーバーがAndroidクライアントと通信するアプリを開発しています。サーバーは複数のメッセージを Android tcpClient に送信する必要があります。メッセージを送信するには、サーバー上の tcpClient オブジェクトを閉じる必要があります。それ以外の場合は送信されません。tcpClient を閉じたら、クライアントと再度通信する方法、tcpClient を閉じたら複数のメッセージを追跡して送信する方法、または閉じずに送信する他の方法があります。質問がまだ不明な場合は、以下にコメントしてください

1つのメッセージを簡単に送信しますが、時々さらにメッセージを送信する必要があります

これはサーバーのコードのスニペットです

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

1 に答える 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();

}
于 2012-10-13T19:51:10.660 に答える