社区
C#
帖子详情
TcpClient的ReceiveTimeout属性的问题
hululu
2002-07-03 11:34:24
我遇到一个很奇怪的问题,不管tcpclient有没有读到数据,当到达了ReceiveTimeout设定的时间之后,都会引发一个Exception.
我以为如果在ReceiveTimeout之内读取到数据,就不会引发异常
谁能给我详细解释一下ReceiveTimeout??
...全文
1327
1
打赏
收藏
TcpClient的ReceiveTimeout属性的问题
我遇到一个很奇怪的问题,不管tcpclient有没有读到数据,当到达了ReceiveTimeout设定的时间之后,都会引发一个Exception. 我以为如果在ReceiveTimeout之内读取到数据,就不会引发异常 谁能给我详细解释一下ReceiveTimeout??
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
1 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
acptvc
2002-07-03
打赏
举报
回复
To hululu (歪瓜裂枣):
ReceiveTimeout的作用的确和你所理解的一样。当Tcp客户端在ReceiveTimeout设定的时间以后还没有受到回应,就会抛出SocketException异常。如果在ReceiveTimeout时间内受到回应则不会抛出。
下面这段代码演示了ReceiveTimeout的作用。这段代码是一个WinForm的一部分,窗体上有两个按钮buttonClient和buttonServer。点击这两个按钮分别可以启动一个TCP Server和TCP Client,各种信息都会显示在一个TextBox中。
private void buttonClient_Click(object sender, System.EventArgs e)
{
System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart(this.Client));
thread.Start();
}
private void buttonServer_Click(object sender, System.EventArgs e)
{
System.Threading.Thread thread=new System.Threading.Thread(new System.Threading.ThreadStart(this.Server));
thread.Start();
}
private void Client()
{
try
{
System.Net.Sockets.TcpClient client=new System.Net.Sockets.TcpClient();
client.ReceiveTimeout=3000; // timeout is 3 second
this.textBox1.Text+="Connecting...\r\n";
client.Connect("localhost",13);
this.textBox1.Text+="Connected...\r\n";
System.Net.Sockets.NetworkStream stream=client.GetStream();
byte[] answer=new byte[1024];
stream.Read(answer,0,1024);
this.textBox1.Text+="Received: "+System.Text.Encoding.ASCII.GetString(answer);
client.Close();
}
catch(Exception e)
{
this.textBox1.Text+=e.Message+"\r\n";
}
}
public void Server()
{
TcpListener tcpListener = new TcpListener(13);
tcpListener.Start();
this.textBox1.Text+="Waiting for a connection....\r\n\r\n";
TcpClient tcpClient = tcpListener.AcceptTcpClient();
this.textBox1.Text+="Connection accepted.\r\n\r\n";
for(int i=0;i<5;i++) //make 5 second delay manually
{
System.Threading.Thread.Sleep(1000);
this.textBox1.Text+=i+"\r\n";
}
NetworkStream networkStream = tcpClient.GetStream();
string responseString = "\r\nSay Hello!";
Byte[] sendBytes = Encoding.ASCII.GetBytes(responseString);
networkStream.Write(sendBytes, 0, sendBytes.Length);
this.textBox1.Text+="\r\nMessage Sent /> : " + responseString;
tcpClient.Close();
tcpListener.Stop();
}
在上面这段例子中,Server在发送回应之前会有5秒的延迟。如果Client的ReceiveTimeout设为3秒,则没有任何错误信息。如果Client的超时设为六秒、七秒或更多,则会抛出异常表明异常。
您可以尝试一下上面这段代码,然后再和您自己的代码进行比较,分析一下错误可能出现的原因。
- 微软全球技术中心 acptvc
本贴子以“现状”提供且没有任何担保,同时也没有授予任何权利。具体事项可参见使用条款(http://support.microsoft.com/directory/worldwide/zh-cn/community/terms_chs.asp)。
为了为您创建更好的讨论环境,请参加我们的用户满意度调查(http://support.microsoft.com/directory/worldwide/zh-cn/community/survey.asp?key=(S,49854782))。
IP端口检测工具
TcpClient
优化超时 设备在线检测工具
IP端口检测工具
TcpClient
优化超时 设备在线检测工具
.Net2.0
TcpClient
类
简介.Net Framework V2.0 的
TcpClient
类,此类为 TCP 网络服务提供客户端连接。
C#以流方式读socket超时设置的实例
主要为大家详细介绍了C#以流方式读socket超时设置的实例,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
利用C#设计端口扫描器
利用C#设计端口扫描器
第4章TCP编程培训课件.ppt
第4章TCP编程培训课件.ppt
C#
111,118
社区成员
642,553
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章