C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: ポート番号の変更について


(過去ログ 156 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■90767 / inTopicNo.1)  ポート番号の変更について
  
□投稿者/ つけぺん (4回)-(2019/04/18(Thu) 16:21:00)

分類:[C#] 

こんにちは。

非同期サーバーについて、プログラムの途中でポート番号を
変更したい場合、どのように行えばよいか、
ご存知の方がいらっしゃいましたら
ご教授いただけませんでしょうか。

以下に、作成したプログラムを示します。
以下のように非同期でアクセス待ち状態になっているところで、
別のモジュールからポート番号を変更したいと思っています。
具体的には、別のモジュールから「textBox.Text」の内容を
書き換え、それを反映させてサーバーを再立ち上げしたいです。

よろしくお願いいたします。


        private void Form1_Load(object sender, EventArgs e)
        {
            // TCPサーバー
            Int32 port = port;
            IPAddress localAddr = Int32.Parse(textBox.Text);
            IPEndPoint ipe = new IPEndPoint(localAddr, port);
            server = new Socket(ipe.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
            server.Bind(ipe);
            server.Listen(100);
            StartAccept(server);
        }

        private static void StartAccept(System.Net.Sockets.Socket server)
        {
            //接続要求待機を開始する
            server.BeginAccept(
                new System.AsyncCallback(AcceptCallback), server);
        }

        private static void AcceptCallback(System.IAsyncResult ar)
        {
            //サーバーSocketの取得
            System.Net.Sockets.Socket server =
                (System.Net.Sockets.Socket)ar.AsyncState;

            //接続要求を受け入れる
            System.Net.Sockets.Socket client = null;
         
            try
            {
                //クライアントSocketの取得
                client = server.EndAccept(ar);
            }
            catch (Exception ex)
            {
                return;
            }

            // データ受信処理
 

            // 接続終了
            client.Close();

            //接続要求待機を再開する
            server.BeginAccept(
                new System.AsyncCallback(AcceptCallback), server);
        }

引用返信 編集キー/
■90769 / inTopicNo.2)  Re[1]: ポート番号の変更について
□投稿者/ Hongliang (783回)-(2019/04/18(Thu) 18:39:24)
何が分からないのかがちょっと読み取れませんが…。
既存のSocketをDisposeして、新たにnew Socket(...)から始めることになります。
その際旧来のSocketでBeginAcceptしていた方は、EndAcceptにおいてObjectDisposedExceptionが発生するので適切に処理します。
引用返信 編集キー/
■90774 / inTopicNo.3)  Re[2]: ポート番号の変更について
□投稿者/ つけぺん (6回)-(2019/04/19(Fri) 12:00:15)
Hongliangさん、

早速のお返事、ありがとうございます。
いただいたように、SocketをDisposeし、新たにSocketを定義することで、
やりたい動作を実装できました。
また、EndAcceptの例外もありがとうございます。
対処できました。

以上、ありがとうございました。

No90769 (Hongliang さん) に返信
> 何が分からないのかがちょっと読み取れませんが…。
> 既存のSocketをDisposeして、新たにnew Socket(...)から始めることになります。
> その際旧来のSocketでBeginAcceptしていた方は、EndAcceptにおいてObjectDisposedExceptionが発生するので適切に処理します。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -