同步套接字第二次receive()调用不返回/超时

时间:2014-09-01 14:26:12

标签: c# sockets synchronous

我有一个与LRS(远程系统)发送器通信的同步客户端套接字,它接受XML输入和TCPIP连接。我能够与设备建立连接并在连接后收到响应;但是当我试图发送一些文本并再次呼叫接收时,没有回复或最终超时。你能解释一下原因吗?

我的示例代码:

Socket tcpSocket = new Socket (AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
System.Net.IPAddress[] IPs = System.Net.Dns.GetHostAddresses("valid_IP_address");
tcpSocket.Connect(IPs[0], PORT_NUMBER);
int nBytes = 0;
byte[] RcvBytes = new byte[BUF_SIZE];
if (tcpSocket.Connected)
{
    tcpSocket.ReceiveTimeout = 60000;   //1 minute timeout
    //connected is true and below Receive call returns some bytes
    //RcvBytes contains a valid response, ie, <LRSN services="blah, blah" ... />
    nBytes = tcpSocket.Receive(RcvBytes, 0, tcpSocket.Available, SocketFlags.None);
}

//below Send returns 8 bytes, the lenth of "SomeText"
nBytes = tcpSocket.Send(Encoding.ASCII.GetBytes("SomeText"));

//*** FAILS, below Receive call never returns, eventually time out
nBytes = tcpSocket.Receive(RcvBytes, 0, tcpSocket.Available, SocketFlags.None);

1 个答案:

答案 0 :(得分:1)

我想你可能遇到过这个问题:

  

LRSN消息传输所有消息都是基于XML的。有了一些XML   解析器,很难处理连续的XML流。缓解   解析传入的消息,以下消息成帧方案是   used:•换行符('\ n')用于分隔a的结尾   信息。两个换行符之间的数据应该形成可解析的XML   文件(即所有标签均衡)。

所以尝试通过发送一些新行。