用多线程进行异步SOCKET挺好理解,就是
1.创建监听
2.Thread _acceptWorkThread = new Thread(AcceptWorkThread);
3.处理回调函数AcceptWorkThread以及回调函数内的回调函数子线程+回调函数 完成异步SOCKET功能
用异步编程的方法很难理解:
1.先要设置 ManualResetEvent
public static ManualResetEvent allDone = new ManualResetEvent(false);
然后创建监听并调用监听的回调函数Socket listener = new Socket(AddressFamily.InterNetwork,
44 SocketType.Stream, ProtocolType.Tcp);
45
46 // Bind the socket to the local endpoint and listen for incoming connections.
47 try
48 {
49 listener.Bind(localEndPoint);
50 listener.Listen(100);
51 while (true)
52 {
53 // Set the event to nonsignaled state.
54 allDone.Reset();
55
56 // Start an asynchronous socket to listen for connections.
57 Console.WriteLine("Waiting for a connection");
58 listener.BeginAccept(
59 new AsyncCallback(AcceptCallback),
60 listener);
61
62 // Wait until a connection is made before continuing.
63 allDone.WaitOne();
64 }
65 }
66 catch (Exception e)
67 {
68 Console.WriteLine(e.ToString());
69 }
我想问的是这种方法是不是没有创建子线程?如果没创建子线程那allDone.Reset();allDone.WaitOne();的各种操作控制的是什么线程?
1.创建监听
2.Thread _acceptWorkThread = new Thread(AcceptWorkThread);
3.处理回调函数AcceptWorkThread以及回调函数内的回调函数子线程+回调函数 完成异步SOCKET功能
用异步编程的方法很难理解:
1.先要设置 ManualResetEvent
public static ManualResetEvent allDone = new ManualResetEvent(false);
然后创建监听并调用监听的回调函数Socket listener = new Socket(AddressFamily.InterNetwork,
44 SocketType.Stream, ProtocolType.Tcp);
45
46 // Bind the socket to the local endpoint and listen for incoming connections.
47 try
48 {
49 listener.Bind(localEndPoint);
50 listener.Listen(100);
51 while (true)
52 {
53 // Set the event to nonsignaled state.
54 allDone.Reset();
55
56 // Start an asynchronous socket to listen for connections.
57 Console.WriteLine("Waiting for a connection");
58 listener.BeginAccept(
59 new AsyncCallback(AcceptCallback),
60 listener);
61
62 // Wait until a connection is made before continuing.
63 allDone.WaitOne();
64 }
65 }
66 catch (Exception e)
67 {
68 Console.WriteLine(e.ToString());
69 }
我想问的是这种方法是不是没有创建子线程?如果没创建子线程那allDone.Reset();allDone.WaitOne();的各种操作控制的是什么线程?
解决方案 »
- .NET WinForm中TreeView控件使用
- 各位大哥帮我看看连excel的问题
- 往SQLserver插入50W条带图片的数据有什么高效率的办法吗??
- 如何把DataSet中的内容写进文本文件
- 在textbox格式化输出的问题
- 关于treeview的node的tag赋值的问题
- VS.NET2003中的属性或解决方案资源管理器等一系列窗口,按小按钮后可以固定位置,或当鼠标over时才伸展出来,没有over时就自动缩加隐藏,
- .net用socket连接java的问题
- 数字转换???
- VS C#.Net 中动态创建的控件(Button)任何响应事件(Click)?
- 关于RichTextBox的一点疑问?
- 请教一个对象的问题!!
这里已经创建子线程监听了
信号量重置
allDone.WaitOne();
信号量等待一个资源不懂百度下C#信号量,主要是用来同步线程的