Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 启用远程时,套接字挂起()方法不一致_C#_Asp.net_Sockets - Fatal编程技术网

C# 启用远程时,套接字挂起()方法不一致

C# 启用远程时,套接字挂起()方法不一致,c#,asp.net,sockets,C#,Asp.net,Sockets,我们有一个web应用程序,它作为套接字列表器工作。在使用AcceptSocket之前,我想检查是否有任何客户端套接字可以连接到此侦听器。如果没有要连接的客户端套接字并取消数据的发送/接收,我想显示一条消息 对于这个问题,我使用了TcpListener类的挂起方法,但这在一定程度上适用于我 如果remote不可用,则返回false。但当remote可用时,有时Pending()方法返回false。当remote始终可用时,我希望它返回true 这是我的代码: 公共广播通讯 { TcpListene

我们有一个web应用程序,它作为套接字列表器工作。在使用AcceptSocket之前,我想检查是否有任何客户端套接字可以连接到此侦听器。如果没有要连接的客户端套接字并取消数据的发送/接收,我想显示一条消息

对于这个问题,我使用了TcpListener类的挂起方法,但这在一定程度上适用于我

如果remote不可用,则返回false。但当remote可用时,有时Pending()方法返回false。当remote始终可用时,我希望它返回true

这是我的代码: 公共广播通讯 {


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;
    }
}