【解決方法】C#でソケットを使用してサーバーへの接続を維持するにはどうすればよいですか?


サーバーに接続しています。 正常に接続された後、CMD netstat コマンド netstat -a -n を使用して接続を確認できます。 ただし、約 21 秒後、接続は ESTABLISHED から CLOSE_WAIT に変わります。 接続が常に ESTABLISHED になるようにしたいです。 どうすればいいでしょうか?

これは netstat コマンドの 1 回目と 2 回目の結果です。

TCP 192.168.10.12:50148 10.10.10.120:3000 確立されました
TCP 192.168.10.12:50148 10.10.10.120:3000 CLOSE_WAIT
これは C# で抜粋したコードです

C#
private void _connect()
{
            var IpEndPoint = new IPEndPoint(IPAddress.Parse("10.10.10.120"), 3000);
            var client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.KeepAlive, true);
            client.SendTimeout = 60;
            client.ReceiveTimeout = 60;
            try
            {
                client.Connect(IpEndPoint);
                int byteCount = 0;
                byte[] bytes = new byte[256];
                while (true)
                {
                    byteCount = client.Receive(bytes);
                    if (byteCount == 0) //not receive anything from server, client will send dummy data to server
                    {
                        byte[] data_send = Encoding.ASCII.GetBytes("Hi, dummy data");
                        client.Send(data_send);
                    }
                    else //receive data from server, write it to log files.
                    {
                        byte[] byte_rec = new byte[byteCount];
                        Buffer.BlockCopy(bytes, 0, byte_rec, 0, byteCount);
                        txt_log.Text = Encoding.ASCII.GetString(byte_rec);
                    }  
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
}

さらに時間をかけてデバッグを試みますが、数秒しか実行できません。その後、接続は ESTABLISHED から CLOSE_WAIT に変更されます。

私が試したこと:

さらに時間をかけてデバッグを試みますが、約 21 秒しか実行されず、その後、接続は ESTABLISHED から CLOSE_WAIT に変更されます。

解決策 1

使用することを考えましたか シグナルR[^] その代わり? 堅牢で使いやすいため、アプリケーションに集中できます。

あるいは、次のようなオープンソース ライブラリを使用することもできます。 GitHub – nterry/AwesomeSockets: 高速、軽量、使いやすい C# 用ソケット ライブラリ。[^] または、独自のツールを構築するための学習ツールとして使用します。 重要な問題はすべてすでに解決されています。

他のライブラリを確認したい場合は、これを試してください。 C# ソケット ライブラリ – Google 検索[^]

コメント

タイトルとURLをコピーしました