Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengurangkan Masa Tamat Sambungan Soket Apabila Menyambung ke Alamat IP Terputus?
Mengurangkan Tamat Masa Sambungan Soket
Isu: Menyambung ke alamat IP yang tidak boleh dicapai melalui soket selalunya membawa kepada tamat masa yang terlalu lama (cth., 15 saat). Artikel ini menunjukkan cara memendekkan kelewatan ini.
Kod Asal:
<code class="language-csharp">try { m_clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); IPAddress ip = IPAddress.Parse(serverIp); int iPortNo = System.Convert.ToInt16(serverPort); IPEndPoint ipEnd = new IPEndPoint(ip, iPortNo); m_clientSocket.Connect(ipEnd); if (m_clientSocket.Connected) { lb_connectStatus.Text = "Connection Established"; WaitForServerData(); } } catch (SocketException se) { lb_connectStatus.Text = "Connection Failed"; MessageBox.Show(se.Message); }</code>
Penyelesaian yang Dipertingkat: Kaedah BeginConnect
dan EndConnect
menawarkan lebih kawalan ke atas gelagat tamat masa. BeginConnect
membenarkan menentukan tempoh tamat masa.
<code class="language-csharp">Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); // Set connection timeout (5 seconds) IAsyncResult result = socket.BeginConnect(sIP, iPort, null, null); bool success = result.AsyncWaitHandle.WaitOne(5000, true); // 5000 milliseconds = 5 seconds if (socket.Connected) { socket.EndConnect(result); // ... proceed with connection ... } else { // Crucial: Close the socket to release resources socket.Close(); throw new ApplicationException("Failed to connect to server."); }</code>
Kod yang disemak ini mencuba sambungan dengan tamat masa 5 saat. Jika sambungan gagal dalam tempoh masa itu, pengecualian akan dilemparkan dan soket ditutup secara eksplisit. Ini menghalang kebocoran sumber dan meningkatkan tindak balas.
Atas ialah kandungan terperinci Bagaimana untuk Mengurangkan Masa Tamat Sambungan Soket Apabila Menyambung ke Alamat IP Terputus?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!