C# 从gprs连接接收数据的延迟
我正在用C#编写解析器。它接收并发送一个最大长度为100的数据包。但是,每个数据包之后(接收和发送)之间的时间间隔超过2秒。我不知道这是我的实施问题还是gprs方面的问题 服务器侦听:C# 从gprs连接接收数据的延迟,c#,networkstream,C#,Networkstream,我正在用C#编写解析器。它接收并发送一个最大长度为100的数据包。但是,每个数据包之后(接收和发送)之间的时间间隔超过2秒。我不知道这是我的实施问题还是gprs方面的问题 服务器侦听: tcpListener = new TcpListener(IPAddress.Any, Names.comPort); tcpListener.Server.NoDelay = true; while (true) { TcpClient client = tcpListener.AcceptTcpC
tcpListener = new TcpListener(IPAddress.Any, Names.comPort);
tcpListener.Server.NoDelay = true;
while (true)
{
TcpClient client = tcpListener.AcceptTcpClient();
Thread th = new Thread(new ParameterizedThreadStart(HandleComm));
th.IsBackground = true;
th.start(client);
}
开始接收数据:
HandleComm(object client)
{
NetworkStream clientStream = ((TcpClient)client).GetStream();
while (true)
{
try { bytesRead = clientStream.Read(buffer, 0, 200);}
catch(Exception ex) {break;}
}
}
这是一个简单的实现,与第二个数据包相比,我收到第一个数据包字节读取的时刻大约是2秒。我觉得太慢了。如何增加接收时间?我已经在收到数据和回复后进行了检查,只花了1毫秒
添加发送部分:
socket.NoDelay = true;
socket.SendTimeout = 200; // minimum time out
socket.SendBufferSize = bytes.Length;
socket.Send(bytes, SocketFlags.DontRoute);
您的代码没有问题,只是如果您有很多客户端,那么为每个套接字创建一个线程不是很有效。查看发件人代码更有趣。@jgauffin,我还添加了发送部分。为什么每个套接字创建一个线程不是很有效?因为我可以在一个线程中处理每个套接字连接?因为同时有100多个连接。请在MSDN(谷歌“BeginSend MSDN”)上阅读BeginSend/EndSend。效率更高。为什么指定SendTimeout?你真的了解它的功能吗?GPRS具有固有的长延迟。你对此无能为力。jgauffin:我用beginSend替换了它,但性能没有提高。为什么使用BeginSend方法更有效?代码没有问题,只是如果有很多客户机,那么为每个套接字创建一个线程不是很有效。查看发件人代码更有趣。@jgauffin,我还添加了发送部分。为什么每个套接字创建一个线程不是很有效?因为我可以在一个线程中处理每个套接字连接?因为同时有100多个连接。请在MSDN(谷歌“BeginSend MSDN”)上阅读BeginSend/EndSend。效率更高。为什么指定SendTimeout?你真的了解它的功能吗?GPRS具有固有的长延迟。你对此无能为力。jgauffin:我用beginSend替换了它,但性能没有提高。为什么使用BeginSend方法更有效?