0

クライアントからのIPアドレスを使用してサーバーに接続したい。HostEndPoint以下のコードを使用しているサーバーのIPアドレスを取得するには、サーバーを正しく検出しますが、イベントハンドラーによって変数が設定された後、待機する必要があるまで他の機能を実行したいのですが、どうすれば実装できますか? .. スキャンに使用される以下のコードは適切な方法ですか? そうでない場合はどうですか?

ありがとう

int startIp = 0;
int EndIp = 255;
int HostPort = 4678;
string = ipPrefix = "192.168.1.";
EndPoint HostEndPoint;

private void ScanHosts()
        {

           Socket clientSocket = new Socket(AddressFamily.InterNetwork,   SocketType.Stream, ProtocolType.Tcp);

        for (startIP = 0; startIP <= endIP; startIP++)
        {
            DnsEndPoint endPoint = new DnsEndPoint(ipPrefix + startIP.ToString(), HostPort);

            try
            {
                SocketAsyncEventArgs socketEventArgs = new SocketAsyncEventArgs();
                socketEventArgs.RemoteEndPoint = endPoint;
                socketEventArgs.UserToken = clientSocket;
                socketEventArgs.Completed += new EventHandler<SocketAsyncEventArgs>(socketEventArgs_Connected);


                clientSocket.ConnectAsync(socketEventArgs);


            }
            catch { }

        }

    }

private void socketEventArgs_Connected(object sender, SocketAsyncEventArgs e)
        {
            if (e.SocketError == SocketError.Success)
            {
                HostEndPoint = e.RemoteEndPoint;                
            }
        }
4

1 に答える 1

0

AutoResetEvent を使用できます。FE 私の使用法:

 AutoResetEvent autoResetLoadDiscTitleAndPersonalDataById = new AutoResetEvent(false);
                                    DataService.LoadDiscTitleAndPersonalDataById(titleToSync.id_on_server, titleInfoXML =>
                                    {
                                        Title TitleInfo = new Title(titleInfoXML);
                                        TitleInfo.UpdateToDb();
                                        autoResetLoadDiscTitleAndPersonalDataById.Set();
                                    });
                                    autoResetLoadDiscTitleAndPersonalDataById.WaitOne();
于 2013-02-22T06:49:05.500 に答える