C# 启用远程时,套接字挂起()方法不一致
我们有一个web应用程序,它作为套接字列表器工作。在使用AcceptSocket之前,我想检查是否有任何客户端套接字可以连接到此侦听器。如果没有要连接的客户端套接字并取消数据的发送/接收,我想显示一条消息 对于这个问题,我使用了TcpListener类的挂起方法,但这在一定程度上适用于我 如果remote不可用,则返回false。但当remote可用时,有时Pending()方法返回false。当remote始终可用时,我希望它返回true 这是我的代码: 公共广播通讯 {C# 启用远程时,套接字挂起()方法不一致,c#,asp.net,sockets,C#,Asp.net,Sockets,我们有一个web应用程序,它作为套接字列表器工作。在使用AcceptSocket之前,我想检查是否有任何客户端套接字可以连接到此侦听器。如果没有要连接的客户端套接字并取消数据的发送/接收,我想显示一条消息 对于这个问题,我使用了TcpListener类的挂起方法,但这在一定程度上适用于我 如果remote不可用,则返回false。但当remote可用时,有时Pending()方法返回false。当remote始终可用时,我希望它返回true 这是我的代码: 公共广播通讯 { TcpListene
TcpListener类挂起方法在Remote运行时始终返回false。如果我们在没有调试的情况下运行代码,则当我们调试代码时,挂起方法不一致,并返回一段时间false和一段时间true。这段代码没有太多意义。我不知道如果刚激活的套接字没有连接请求挂起;或者为什么要调用
AcceptSocket()
两次;并且测试刚刚接受的客户端是否已连接是徒劳的。@EJP如果Socket.pending()方法retuns false,则我在页面加载中捕获该值以显示客户端是否可用。因此,它返回false或true。client.acketpt()这个方法在这里错误地键入了两次。在代码中,我只调用了一次。我想知道是否有可用的客户端。那么我如何检查它?但为什么要调用Socket.Start()这里,在这个方法中?您只允许客户端连接一个很小的窗口。@EJP我想我们无法清楚地解释这个问题,让我再解释一下。您可能知道套接字是TCPListner类的一个对象。socket.start()方法用于开始侦听远程或客户端的传入连接。如果不启动,我就无法以任何其他方式编写代码,检查是否有人在等待连接。我的基本问题是,如果没有人侦听,代码需要告诉用户,然后继续下一步工作。
string strSiteID = "SiteID";
socket.Start();
if(!socket.Pending())
{
Console.WriteLine("Sorry, no connection requests have arrived");
return false;
}
else
{
client = socket.AcceptSocket();
if (client.Connected == true)
{
// int nSiteID = int.Parse(ConfigurationSettings.AppSettings.Get("SiteID"));
object dSiteID = GetSiteSetting(ref strSiteID);
IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;
WriteLog(string.Format("Connected with {0} at port {1}", clientep.Address, clientep.Port));
string strWelcome = STARTMESSAGE + "WHOAMI" + " " + dSiteID + " " + dSiteID + FINISHMESSAGE;
byte[] data = new byte[1024];
data = Encoding.ASCII.GetBytes(strWelcome);
int i = client.Send(data, data.Length, SocketFlags.None);
WriteLog(String.Format("Message sent {0} bytes!", i));
//Get reply from the Connected cleint.
byte[] bytes = new byte[1024];
i = client.Receive(bytes, bytes.Length, SocketFlags.None);
if (i != -1)
{
WriteLog(string.Format(System.Text.Encoding.UTF8.GetString(bytes)));
}
}
return true;
}
}