Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从gprs连接接收数据的延迟_C#_Networkstream - Fatal编程技术网

C# 从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

我正在用C#编写解析器。它接收并发送一个最大长度为100的数据包。但是,每个数据包之后(接收和发送)之间的时间间隔超过2秒。我不知道这是我的实施问题还是gprs方面的问题

服务器侦听:

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方法更有效?