Dio*_*o F 10 c# timeout tcp stream tcpclient
编程TCP服务器时,我想设置从客户端读取请求的超时时间:
var tcpClient = tcpListener.AcceptTcpClient();
var networkStream = tcpListener.GetStream();
tcpClient.ReceiveTimeout = 10000;
networkStream.ReadTimeout = 10000;
Run Code Online (Sandbox Code Playgroud)
见最后两行.我应该选择哪一个?它们在有效性方面是否相同,或者它们在哪些方面有所不同?
我应该选择哪一个?
前者和后者都将其内部Socket设置为接收超时.从相同的插座会起泡TcpClient的NetworkStream创造,所以我一起去前者.
它们在有效性方面是否相同,或者它们在哪些方面有所不同?
我们可以查看源代码是件好事.这是TcpClient.ReceiveTimeout:
public int ReceiveTimeout
{
get
{
return numericOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout);
}
set
{
Client.SetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout, value);
}
}
Run Code Online (Sandbox Code Playgroud)
这设置了underling客户端套接字的接收超时(Client属于类型Socket).然后传递到NetworkStream:
public NetworkStream GetStream()
{
// Shortened for brevity
if (m_DataStream==null)
{
m_DataStream = new NetworkStream(Client, true);
}
return m_DataStream;
}
Run Code Online (Sandbox Code Playgroud)
当NetworkStream查找超时时,它看起来在Socket:
public override int ReadTimeout
{
get
{
int timeout = (int)m_StreamSocket.GetSocketOption(SocketOptionLevel.Socket,
SocketOptionName.ReceiveTimeout);
if (timeout == 0)
{
return -1;
}
}
return timeout;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4885 次 |
| 最近记录: |