1

サーバーに情報(xmlデータを含む文字列)を送信するための非SSL url:portを指定したクライアントがあります。私はPutty(telnetモード)を使用してサーバーと正常に通信し、応答を受信しましたが、次のコードを使用していると通信が行われません

outputmsg = string.Empty;
                var m_socListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
                IPHostEntry ipAddress = Dns.GetHostEntry("testurlhere");
                var ip = new IPEndPoint(ipAddress.AddressList[0], 10121);
                m_socListener.Connect(ip);

                byte[] tosend = GetBytes(inputmsg);
                byte[] buffer = new byte[1024];
                m_socListener.Send(tosend); // doesnt sends data and returns immediately
                m_socListener.Receive(buffer); // waits forever
                m_socListener.Close();



 static byte[] GetBytes(string str)
        {
            byte[] bytes = new byte[str.Length * sizeof(char)];
            System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
            return bytes;
        }

    static string GetString(byte[] bytes)
    {
        char[] chars = new char[bytes.Length / sizeof(char)];
        System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
        return new string(chars);
    }
4

2 に答える 2

1

ここでの解決策は、SetSockOptNoDelayを使用することだと思います。

http://msdn.microsoft.com/en-us/library/e160993d.aspx

また、WireSharkを試すためのm0sの最も優れた提案の2番目です。あなたがまだそれに精通していないなら-満足が保証されます!

しかし、NoDelay(Nagleを無効にする)で問題が解決する可能性があるようです。このリンクは明確にするのに役立つかもしれません:

http://en.wikipedia.org/wiki/Nagle%27s_algorithm

于 2012-06-02T05:26:42.143 に答える
0

解決策は、私の場合はASCIIである正しいエンコーディングを使用し、paulsm4が言ったようにメッセージに\nを追加することでした。

于 2012-06-04T13:18:53.073 に答える