Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mengurangkan Masa Tamat Sambungan Soket Apabila Menyambung ke Alamat IP Terputus?

Bagaimana untuk Mengurangkan Masa Tamat Sambungan Soket Apabila Menyambung ke Alamat IP Terputus?

Barbara Streisand
Barbara Streisandasal
2025-01-10 11:17:41435semak imbas

How to Reduce Socket Connect Timeout When Connecting to a Disconnected IP Address?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn