热门标签 | 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);}}}


推荐阅读
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • 基于Socket的多个客户端之间的聊天功能实现方法
    本文介绍了基于Socket的多个客户端之间实现聊天功能的方法,包括服务器端的实现和客户端的实现。服务器端通过每个用户的输出流向特定用户发送消息,而客户端通过输入流接收消息。同时,还介绍了相关的实体类和Socket的基本概念。 ... [详细]
  • 本文整理了Java面试中常见的问题及相关概念的解析,包括HashMap中为什么重写equals还要重写hashcode、map的分类和常见情况、final关键字的用法、Synchronized和lock的区别、volatile的介绍、Syncronized锁的作用、构造函数和构造函数重载的概念、方法覆盖和方法重载的区别、反射获取和设置对象私有字段的值的方法、通过反射创建对象的方式以及内部类的详解。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了Oracle数据库中tnsnames.ora文件的作用和配置方法。tnsnames.ora文件在数据库启动过程中会被读取,用于解析LOCAL_LISTENER,并且与侦听无关。文章还提供了配置LOCAL_LISTENER和1522端口的示例,并展示了listener.ora文件的内容。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 本文介绍了在mac环境下使用nginx配置nodejs代理服务器的步骤,包括安装nginx、创建目录和文件、配置代理的域名和日志记录等。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 微信官方授权及获取OpenId的方法,服务器通过SpringBoot实现
    主要步骤:前端获取到code(wx.login),传入服务器服务器通过参数AppID和AppSecret访问官方接口,获取到OpenId ... [详细]
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社区 版权所有