[英]c# sockets blocking
假设我有一个TcpClient,我接受来自c#中的TcpServer,并且出于某种原因,它会因阻塞而保持默认。 是否有其他力量可以改变套接字阻塞的设置方式? 比如说它是否受到远程连接的影响?
我知道我设置了阻止来修改一些版本,但我更改了它,甚至引入了TcpClient而不是直接套接字。 我没有专门将阻塞改回true,我只是评论了blocking = false out。 这可能与端点持续存在吗?
我不知道,虽然它似乎只是因为我有一天编程,我的套接字变得unruley而没有任何真正的代码更改。
public void GetAcceptedSocket(TcpClient s)
{
try
{
sock = s;
IPEndPoint remoteIpEndPoint = s.Client.RemoteEndPoint as IPEndPoint;
strHost = remoteIpEndPoint.Address.ToString();
intPort = remoteIpEndPoint.Port;
ipEnd = remoteIpEndPoint;
sock.ReceiveTimeout = 10000;
boolConnected = true;
intLastPing = 0;
LastPingSent = DateTime.Now;
LastPingRecieved = DateTime.Now;
handleConnect(strHost, intPort);
oThread = new Thread(new ThreadStart(this.run));
oThread.Start();
}
catch (Exception e)
{
handleError(e, "Connect method: " + e.Message);
}
}
比如说它是否受到远程连接的影响?
不。
如果你显示一些在服务器端创建Socket
或TcpClient
代码会更好。 我在C#中找不到TcpServer
类。 你在谈论TcpListener
吗? 如果您使用,请确保在使用AcceptSocket
创建新套接字时set Socket's Blocking true
。 如果您调用AcceptTcpClient
,则不必担心阻塞或非阻塞模式,因为TcpClient
始终是阻塞模式。
TcpClient类提供了在同步阻塞模式下通过网络连接,发送和接收流数据的简单方法。
来自MSDN 。
真的没有答案,我从来没有重复这个,几个月后,一个新的Windows安装,选择了代码,并没有问题了。 虽然非常奇怪,但却无法找到程序化推理。 就像我说的,几个月后它有点工作? 他们应该有一个'Unawnserable'选项:p。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.