[ad_1]
サーバーに接続しています。 正常に接続された後、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# で抜粋したコードです
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 検索[^]
[ad_2]
コメント