0

TCP ソケットを使用して XML 形式のメッセージをサーバーに送信しています。サーバーは完全なメッセージで応答します (WireShark で確認しました) が、自分の側で完了するのに問題があります。1 バイトより大きいバッファを使用すると、応答のメッセージの最後にバッファの残りのサイズがありません。1 バイトのバッファを使用すると、99% のケースで機能します。私が使用している と関係があると思いますが、StringBuilderすでにアイデアがありません。と も試しましたが、うまくNetworkStreamいきStreamSocketませんでした。任意のヘルプまたは応答をいただければ幸いです。

    public string StartClient(string message, string ip, int port) {

    byte[] bytes = new byte[1];
    int bytesRec = 0;
    StringBuilder reply = new StringBuilder();

    try {
        IPAddress ipAddress = IPAddress.Parse(ip);
        IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

        Socket sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            sender.Connect(remoteEP);

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

            sender.Send(msg);

            do
            {
                bytesRec = sender.Receive(bytes);

                if (bytesRec == 0)
                {
                    sender.Shutdown(SocketShutdown.Both);
                    sender.Close();
                    break;
                }

                else
                {
                    reply.Append(Encoding.ASCII.GetString(bytes, 0, bytesRec));
                }
            } while (sender.Available > 0);
        }

    catch (Exception e) 
    {
        return e.ToString();
    }

    return reply.ToString(); ;
}
4

1 に答える 1

0

行を変更してみてください:

while (sender.Available > 0)

に:

while (bytesRec > 0)
于 2014-09-09T09:02:36.583 に答える