1

ソケットプログラミング、ASP.Net C#、VS2008

リモート(クライアント)のステータスが接続されているか、タイマー制御によって5秒ごとに切断されているかを判断しようとしています。初めてサーバーを起動すると、ソケットのステータスがconnected = trueになります。しかし、次回ソケットのステータスを取得すると null になります。

注: クラスのオブジェクトを作成することにより、クラスから Aspx ページへのソケット ステータスにアクセスしています。

これは私のコードです:

Aspx ページ:

 protected void Timer1_Tick1(object sender, EventArgs e)
{
Communication obj=new communication();
bool Rexits=obj.listen();
if(Rexits)
Response.write("Remote is On");
else
Response.write("Remote is Off");
}
**************************************************************************
Communication class:

Socket  listener=new Socket();
Socket connection;
  public bool listen()
        {
        listener.SetSocketOption(SocketOptionLevel.Socket,  

SocketOptionName.ReuseAddress, true);
        bool RemoteExits = false;
        try
        {

            if (connection== null)
            {
                listener.Bind(endPoint);
                listener.Listen(pendingConnectionQueueSize);
                listener.BeginAccept(AcceptConnection, null);
                RemoteExits = IsConnected(connection);

            }
            return  RemoteExits;
        }
        catch (Exception ex)
        {

            a = IsConnected(connection);
            return  RemoteExits;
         }
    }

//callback method

 protected void AcceptConnection(IAsyncResult res)
    {


       // Make sure listener doesn't go null on us.
        lock (this)
        {
           connection = listener.EndAccept(res);
           listener.BeginAccept(AcceptConnection, null);
        }

        // Close the connection if there are no handlers to accept it!
        if (Connected == null)
        {
            connection.Close();

        }
        else
        {
          TcpServer tc=new TcpServer();
           Clifton.TcpLib.ConnectionState cs=new    

Clifton.TcpLib.ConnectionState(connection,cs);
            OnConnected(new TcpServerEventArgs(cs));
        }
    }
//Poll Mehod
 public static bool IsConnected(Socket client)
    {
        try
        {

            bool connected = !(client.Poll(1, SelectMode.SelectRead) &&     

client.Available == 0);
            return connected;
        }
        catch
        {
            return false;
        }
    }
4

0 に答える 0