我有一个客户端给了我一个非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);
}
答案 0 :(得分:1)
我认为这里的解决方案可能是SetSockOpt NoDelay:
http://msdn.microsoft.com/en-us/library/e160993d.aspx
我也是第二次尝试WireShark的最佳建议。如果您还不熟悉它 - 保证满意!
但听起来像NoDelay(禁用Nagle)可能会解决问题。此链接可能有助于澄清:
答案 1 :(得分:0)
解决方案是在我的情况下使用正确的编码它是ASCII并且在paulsm4说的时候将\ n附加到消息上。