[英]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.