Synchronous Server アプリケーションで ReadKey() を使用して Socket.Accept() を中断する方法を知りたいです。たとえば、Esc または Ctr+X キーを押すと、Socket が自動的に停止します。いくつかの読書に基づいて、Accept() メソッドを呼び出した後、接続が受信されるまでアプリケーションが中断されることがわかっています。cmiw
ここに私のコードの一部..
Socket listener = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
try
{
listener.Bind(localEndPoint);
listener.Listen(10);
while (true)
{
Console.WriteLine("\t [wating connection from client...]");
//Based on msd doc, application will be suspend after this method
Socket handler = listener.Accept();
data = null;
//i wanna catch an Escape key here
ConsoleKeyInfo keyx = Console.ReadKey(true);
while (keyx.Key != ConsoleKey.Escape)
{
// Koneksi masuk yang di proses
while (true)
{
bytes = new byte[1024];
int bytesRec = handler.Receive(bytes);
data += Encoding.ASCII.GetString(bytes, 0, bytesRec);
if (data.IndexOf("<EOF>") > -1)
{
break;
}
}
Console.WriteLine("Message Received : {0}", data);
Console.WriteLine(handler.RemoteEndPoint.ToString());
// Memberikan balasan pada client
Console.Write("Your Reply : ");
String pesan = Console.ReadLine();
byte[] msg = Encoding.ASCII.GetBytes(pesan + "<EOF>");
handler.Send(msg);
}
handler.Shutdown(SocketShutdown.Both);
handler.Close();
}
}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}