有关TCP设置ReadTimeout的问题

Gao2003 2006-08-30 05:31:05
当我设置了ReadTimeout后,用Read去读数据,如果碰到超时情况时(触发IOException)后。下次再去读时,不管有没有数据,没有延时,就超时(触发IOException),不知道什么原因,我用的是VS2005。
...全文
1244 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gao2003 2006-08-31
  • 打赏
  • 举报
回复
终于解决了,这样处理就可以了
public byte[] Receive()
{
byte[] data=null;
if (tcp.Client.Poll(3000000, SelectMode.SelectRead))
{
if (tcp.Available > 0)
{
data = new byte[tcp.Available];
tcp.GetStream().Read(data, 0, data.Length);
}
else
data = null;
}
else//read timeout
{
data = null;
}
return data;
}
原来以为在LINUX和C下才用select和Poll,原来.net下也有。那个ReadTimeout浪费我半天时间.
kokokokokoko 2006-08-31
  • 打赏
  • 举报
回复
我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂
我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂
我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂
我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂
我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂
我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂我頂
Gao2003 2006-08-31
  • 打赏
  • 举报
回复
高手!!高手????
Gao2003 2006-08-30
  • 打赏
  • 举报
回复
是不是在Read Timeout后要设置什么啊,如果在Timeout一次后,一直调用Receive则每隔一段时间就会触发IOException
Gao2003 2006-08-30
  • 打赏
  • 举报
回复
大家可以试一下面的代码:
public byte[] Receive()
{
byte[] data=null;
try
{
data = new byte[500];
int count=ns.Read(data, 0, data.Length);
byte[] read_data = new byte[count];
Array.Copy(data, read_data, count);
return read_data;
}
catch (IOException err)//read timeout
{
return null;
}
}
其构造函数中
ns = tcp.GetStream();
ns.ReadTimeout = 3000;


当出现一次超时时,下次再调用Receive()时,不管有没有数据都出触发IOException,难到是BUG吗????请高手指条道,谢谢
lxhvc 2006-08-30
  • 打赏
  • 举报
回复
此属性返回通过在基础流上调用 ReadTimeout 属性而返回的值。设置此属性时,将基础流上的 ReadTimeout 值设置为指定值。

如果基础流为 NetworkStream,则默认情况下 ReadTimeout 以毫秒为单位并且被设置为 Infinite,这样读操作就不会超时
wangwei155 2006-08-30
  • 打赏
  • 举报
回复
JF

110,535

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧