От клиента отмените сокет сервера - PullRequest
0 голосов
/ 24 апреля 2018

Большой медленный поток через асинхронный сокет .NET. Данные поступают с инструментов, поэтому могут быть 1 ряд в секунду (или больше). Иногда он может просто заглохнуть.

Используя два примера из MSDN
асинхронно-клиент-сокета Пример
пример асинхронного сервера-сокета

У меня есть требование от , чтобы клиент сокета прекратил передачу с середины потока сервера. Каждое сообщение довольно маленькое. Не нужно останавливать середину сообщения. Необходимо иметь возможность остановить цикл - может получать тысячи маленьких сообщений (для клиента).

Я думаю сохранить ссылку на client и позвонить:

client.Shutdown(SocketShutdown.Both);
client.Close();

Это правильный подход?

private static Socket client;
private static void StartClient()
{
    // Connect to a remote device.  
    try
    {
        // Establish the remote endpoint for the socket.  
        // The name of the   
        // remote device is "host.contoso.com".  
        //IPHostEntry ipHostInfo = Dns.GetHostEntry("host.contoso.com"); Dns.GetHostName()
        IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName());
        IPAddress ipAddress = ipHostInfo.AddressList[0];
        IPEndPoint remoteEP = new IPEndPoint(ipAddress, port);

        // Create a TCP/IP socket.  
        Socket client = new Socket(ipAddress.AddressFamily,
            SocketType.Stream, ProtocolType.Tcp);
        //client = new Socket(ipAddress.AddressFamily,
        //    SocketType.Stream, ProtocolType.Tcp);

        // Connect to the remote endpoint.  
        client.BeginConnect(remoteEP,
                            new AsyncCallback(ConnectCallback), client);
        connectDone.WaitOne();

        // Send test data to the remote device.  
        Send(client, "This is a test<EOF>");
        sendDone.WaitOne();

        // Receive the response from the remote device.  
        Receive(client);
        receiveDone.WaitOne();

        // Write the response to the console.  
        Console.WriteLine("Response received : {0}", response);

        // Release the socket.  
        client.Shutdown(SocketShutdown.Both);
        client.Close();

    }
    catch (Exception e)
    {
        Console.WriteLine(e.ToString());
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...