当前位置: 首页 > article >正文

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

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);}}}
http://www.lryc.cn/news/2418201.html

相关文章:

  • 小巫随笔14
  • 【附源码】JAVA计算机毕业设计在线考试系统(springboot+mysql+开题+论文)
  • html简单网页代码:期末网页制作 HTML+CSS+JavaScript 个人主页网页设计实例
  • Hadoop大数据平台
  • PCB SI仿真流程
  • Keil报错ST-LINK USB communication error解决方法
  • 网站SEO优化部分原则
  • AI 旅行工具大盘点!31 款 AI 旅行行程规划工具,一键规划旅行路线!
  • PHP+MySQL制作简单动态网站(附详细注释+源码)
  • 单片机加解密原理
  • 【Java】Java的基础入门学习
  • 注意,你注册的假1024可能就是它
  • CDLinux制作U盘启动
  • Delphi控件SPComm改造为Lazarus版本的问题
  • display:block的作用
  • web前端——给某网站移动版主页的体育板块进行布局设计
  • 目前数字人经济大火,但数字人价格成本昂贵,那么数字人免开会员怎么无限时长制作,数字人怎么批量自动生成视频源码开发技术
  • deepnode处理过的图片_微信图文排版用什么软件?文章图片大小不一样排版不齐怎么办?...
  • Hive sql 中 over 总结
  • 内部错误 (com.intellij.util.io.PersistentEnumeratorBase$VersionUpdatedException):
  • MBTI职业性格测试小程序
  • spring-boot-starter-actuator访问/actuator/info报404错误
  • 《GhostXP_SP2电脑公司特别版_8.0》
  • win7 梦幻桌面下载地址
  • 【ComfyUI】爽玩必备!6大插件汇总推荐
  • python用于人工智能的例子,python人工智能有趣例子
  • Installshield2008教程
  • Linux和PHP 开发参考消息 php博文+Linux镜像+http服务器+存储技术+框架+视频+好书+通信...
  • Rootkit
  • 在 ubuntu10.04下 载 android源码 步骤