请问在Socket类中如何实现超时重发?

nsza01 2007-05-17 11:15:05
Socket基于TCP,处于阻塞模式。函数结构如下
private String SendAndReceive(Byte[] temp, Int32 location, int length)
{
bool Sending = true;
bool firstSend = true;
while (Sending)
{
try
{
if(!firstSend)
{
Sending = false;
}
skSocket.Send(temp, (length + 4), SocketFlags.None);
num = skSocket.Receive(byt);
str = byt.ToString();
return str;
}
catch (Exception error)
{
if (firstSend)
{
firstSend = false;
}
else
{
throw new Exception;
}
}
}
}


在这个结构下,一旦skSocket.Receive发生超时,再次调用时就直接处于超时状态,而不是等待skSocket.ReceiveTimeout时间后再超时。请问如何清除skSocket.Receive的超时标志?
...全文
363 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qsqtok 2007-05-17
  • 打赏
  • 举报
回复
guolv
qsqtok 2007-05-17
  • 打赏
  • 举报
回复
lu guo
qsqtok 2007-05-17
  • 打赏
  • 举报
回复
lg!
nsza01 2007-05-17
  • 打赏
  • 举报
回复
已解决 超时后重新将socket设成阻塞即可
sophia2000 2007-05-17
  • 打赏
  • 举报
回复
www.lslnet.com/linux/dosc1/34/linux-260387.htm
zhangliu_521 2007-05-17
  • 打赏
  • 举报
回复
牧野老兄的博客上有
http://blog.csdn.net/wzd24/archive/2007/04/13/1564112.aspx
leixueqiyi 2007-05-17
  • 打赏
  • 举报
回复
我看见别人是把skSocket的接收缓冲区直接每次清空

110,535

社区成员

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

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

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