【发布时间】:2014-10-20 19:30:13
【问题描述】:
我有一个连接到 PC 的 Kinect 传感器,我的应用程序通过驻留在另一台 PC 上的 TCP 连接请求帧。我的问题是我无法触发两个请求并背靠背获取帧。
这是连接到传感器的服务器端代码:
while(running)
{
if (networkStreamReceive.DataAvailable)
{
byte[] clientRequest = new byte[8];
networkStreamReceive.Read(clientRequest, 0, clientRequest.Length);
string clientData = System.Text.Encoding.ASCII.GetString(clientRequest);
clientData = clientData.Substring(0, clientData.IndexOf("$"));
if (clientData == "1")
{
// Process sensor data.
// Takes about 5-15 ms.
}
}
}
在客户端,它发出如下请求:
NetworkStream serverStreamSend = clientSocketSend.GetStream();
//Send the request.
byte[] outStream = System.Text.Encoding.ASCII.GetBytes("1$");
serverStreamSend.Write(outStream, 0, outStream.Length);
Thread.Sleep(800); // Works for 1000ms and above.
serverStreamSend.Write(outStream, 0, outStream.Length);
receivedFrame = receiveFrame();
receivedFrame = receiveFrame();
receiveFrame 从流中读取数据。
这仅在我在客户端添加至少一秒钟的睡眠时才有效。如果我删除该睡眠,我会看到客户端能够触发这两个请求,但在读取第二个接收帧时卡住了。
在服务器端,我看到第一个触发器进来了,但第二个没有通过。当处理传感器数据的时间只有大约 10-15 毫秒时,我无法理解为什么会这样。
【问题讨论】:
-
您是否考虑过在此处使用
ReadAllBytes而不是这一行networkStreamReceive.Read( -
networkStreamReceive 是 NetworkStream 类型的对象,我没有看到 ReadAllBytes 函数。
标签: c# sockets asynchronous tcpclient