1

我有一个客户端,它给了我一个非 ssl url:port 来将信息(包含 xml 数据的字符串)发送到他们的服务器。我已经习惯了 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

我认为这里的解决方案可能是 SetSockOpt NoDelay:

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

我也支持 m0s 的最优秀建议,尝试使用 WireShark。如果您还不熟悉它 - 保证满意!

但听起来 NoDelay(禁用 Nagle)可能会解决问题。此链接可能有助于澄清:

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

于 2012-06-02T05:26:42.143 回答
0

解决方案是在我的情况下使用正确的编码,它是 ASCII 并将 \n 附加到消息中,如 paulsm4 所说。

于 2012-06-04T13:18:53.073 回答