我正在尝试启动没有ManualResetEvent的连接,它只是跳过BeginAcceptSocket告诉我按任意键继续,虽然使用ManualResetEvent我成功获得连接但客户端发送给我不相关的字节。
static void Main(string[] args)
{
tcpListener = new TcpListener(IPAddress.Any, 8484);
tcpListener.Start();
tcpListener.BeginAcceptSocket(AcceptSocket, tcpListener);
}
private static void AcceptSocket(IAsyncResult async)
{
new Client(tcpListener.EndAcceptSocket(async));
tcpListener.BeginAcceptSocket(AcceptSocket, null);
}
对于该示例,将Client视为传入字节的接受者。
答案 0 :(得分:0)
BeginAcceptSocket
是异步的;它没有与Main
在同一个线程上运行,因此,您的程序在收到连接之前就已经结束了。要解决此问题,请转换为同步Accept
或保持主线程处于活动状态以防止程序关闭。我建议你在使用这些方法之前先阅读implications of asynchronous methods的内容。
我需要看到你的ManualResetEvent
代码来回答这个问题但是"不相关的字节"对我来说没什么意义,因为我不知道你在期待什么或者你得到了什么。另外,我认为使用ManualResetEvent
同时在完全相同的地方使用异步方法实际上首先违背了使用异步方法的目的。