热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

C#中Socket的Accept()和BeginAccept()的区别

C#中Socket的Accept()和BeginAccept()的区别区别在于:Accept()是同步的,BeginAccept()是异步的调用ac

C#中Socket的Accept()和BeginAccept()的区别


区别在于:Accept()是同步的,BeginAccept()是异步的


调用accept()或者BeginAccept()函数来接受客户端的连接,这就可以和客户端通信了。


BeginAccept()会开启一个异步操作来获取连接的Socket,而Accept()会将程序在该位置中断来等待连接。


使用 BeginAccpet() 在启动程序后,程序会跳过代码,直接运行结束,而使用 Accept() 时程序则会在当前位置停止


实例:

Utils.socketAccept = new AsyncCallback(SocketConnected.ClientAccepted);
Utils.iep = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 11000);
if (Utils.mySocket == null)
{Utils.mySocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);Utils.mySocket.Bind(Utils.iep);Utils.mySocket.Listen(10);
}
// 异步接受Clinet,每有一个Clinet连接过来,就调用
Utils.mySocket.BeginAccept(Utils.socketAccept, Utils.mySocket);

mySocket.BeginAccept(MachineMaster.socketAccept, MachineMaster.mySocket);

public IAsyncResult BeginAccept(AsyncCallback callback, object state);

public static AsyncCallback socketAccept;

socketAccept = new AsyncCallback(SocketConnected.ClientAccepted);

public class SocketConnected
{public static void ClientAccepted(IAsyncResult ar){try{//设置计数器 Utils.connectedCount++;var socket = ar.AsyncState as Socket;//这就是客户端的Socket实例,我们后续可以将其保存起来 var client = socket.EndAccept(ar);//客户端IP地址和端口信息 IPEndPoint clientipe = (IPEndPoint)client.RemoteEndPoint;Utils.tsk.UpdateLog(clientipe + " is connected,total connects " + Utils.connectedCount);//接收客户端的消息(这个和在客户端实现的方式是一样的)异步 client.BeginReceive(Utils.buffer, 0, Utils..buffer.Length, SocketFlags.None, new AsyncCallback(ReceiveMessage), client);//准备接受下一个客户端请求(异步) socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);}catch (Exception ex){Utils.tsk.UpdateLog(ex.Message);}}}


推荐阅读
author-avatar
她丶无可取代
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有