Большой медленный поток через асинхронный сокет .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());
}
}