我实现的是read函数一个数据在规定的时间内(ReceiveTimeout )没有得到数据,就循环read三次。本来期望每次read函数都能等待ReceiveTimeout这个时间。
但是实际情况是只有第一次等待了这么长时间,以后的read就马上返回,还提示没有读到数据。请高手解答。急!!ReceiveTimeout这个属性到第二次怎么就失效了呢?
我的代码大概是:
TcpClient _tcpsocket = null;
NetworkStream _stream2Server;
_tcpsocket = new TcpClient(BHSServerName, BHSServerPort);
_tcpsocket.ReceiveTimeout = BHSWaitPRTimeOut;
_stream2Server = _tcpsocket.GetStream();
int i = 0;
byte[] _buffer = new byte[200];
while(i<3)
{
int bytesRead = _stream2Server.Read(_buffer, 0, _buffer.Length);
i++;
}
但是实际情况是只有第一次等待了这么长时间,以后的read就马上返回,还提示没有读到数据。请高手解答。急!!ReceiveTimeout这个属性到第二次怎么就失效了呢?
我的代码大概是:
TcpClient _tcpsocket = null;
NetworkStream _stream2Server;
_tcpsocket = new TcpClient(BHSServerName, BHSServerPort);
_tcpsocket.ReceiveTimeout = BHSWaitPRTimeOut;
_stream2Server = _tcpsocket.GetStream();
int i = 0;
byte[] _buffer = new byte[200];
while(i<3)
{
int bytesRead = _stream2Server.Read(_buffer, 0, _buffer.Length);
i++;
}
解决方案 »
- js
- 请C#高手看看BCD码的转换问题
- 關於Socket通讀的問題
- .net中进行AUTOCAD二次开发,如何新增菜单?
- 请教一个获取网页内容的问题!
- 高分求在c# 中怎么去连Access数据库中的查询(存储过程),希望给出源码.急,在线等,up 有分
- 请指教ado.net + access +windowsapplication 中如何访问带密码的access数据库啊
- 如何确保我的程序只有一个实例再运行?
- 有没有类似任务栏自动隐藏的api...?
- 在Visual Studio2017中调用Matlab的dll文件报错
- 关于C#读取INI文件问题!
- 为什么我的DataTable中读不到数据哦........????
在不重新建立socket的情况下?
因为我要重读三次,才重连socket !!
谢谢,兄弟们@@ 急呀!
请问各位高手就没遇到过这个问题么?谢谢了!!
我把希望寄托在你们这了!
我马上就要出差解决这个问题了
NetworkStream有个DataAvailable只读属性
当第一次read失败后,该属性会自动变为false
所以循环体应该改为
while(i<3)
{
if(DataAvailable)
{
int bytesRead = _stream2Server.Read(_buffer, 0, _buffer.Length);
i++;
}
else
sleep(3000);
}