专业财税服务推荐

精选优质财税服务,为企业提供专业、可靠的财税解决方案,助力企业健康发展

零报税代理记账
零申报代理记账
报税做账算帐财务报表老会计做账
代理记账
咨询微信:lhy_happyday
工商营业执照年度年报年检公示
全国个体、企业、公司、合作社工商年审年报服务!
个体/10元/次 企业/20元/次
咨询微信:lhy_happyday
财税咨询服务
一对一专业财税咨询,解决企业财税难题,提供定制方案
咨询微信:lhy_happyday
财务分析服务
小规模个体报税0申报税务年报工商年报月报季报报税代理记账
咨询微信:lhy_happyday
立即咨询专业财税顾问
微信号: lhy_happyday
会计从业9年,管理多家个体工商、小规模、一般纳税人等企业的财务、税务等相关工作!。
扫码或搜索添加微信,备注"财税咨询"获取专属优惠
知方号 知方号

C#网络编程学习(4) socket服务端接收数据

C#网络编程学习(4)

1、方法介绍

BeginAccept(AsyncCallback callback, object state);异步开始监听客户端连接。

callback为一个委托,在成功接收客户端连接时调用委托方法。向委托方法中传递的参数**EndAccept (IAsyncResult result);**结束监听客户端连接,一般在委托中成功接收连接后使用。1. **result**:它存储此异步操作的状态信息以及任何用户定义数据。返回。使用**result.AsyncState** 可以接收传递过来的参数。**BeginReceive (byte[] buffer, int offset, int size, SocketFlags flag, AsyncCallback callback, object state);**异步接收服务器发送来的数据1. 存储接收的数据2. 从buffer哪开始存储数据3. 要接受最大的字节数4. SocketFlags 值的按位组合5. 接收成功后调用的委托方法6. 要传递的参数2、服务器端namespace Tcp服务器端{ class Program { /// /// 接收客户端发送数据数组 /// static byte[] data = new byte[1024]; static void Main(string[] args) { StartServerAsync(); } static void StartServerAsync() { Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); EndPoint point = new IPEndPoint(IPAddress.Parse("192.168.1.3"), 5555); serverSocket.Bind(point); serverSocket.Listen(100); //异步监听客户端连接 serverSocket.BeginAccept(AcceptCallBack,serverSocket); Console.ReadKey(); } /// /// 接收到客户端连接时调用 /// static void AcceptCallBack(IAsyncResult ar) { Console.WriteLine("一个客户端连接了进来 "); Socket serverSocket = null; try { //接收传递过来的main中的serverSocket serverSocket = ar.AsyncState as Socket; //结束接收,返回接收到的clientSocket Socket clientSocket = serverSocket.EndAccept(ar); clientSocket.Send(Encoding.UTF8.GetBytes("你好呀。。。客户端")); //异步开始监听客户端传递数据 clientSocket.BeginReceive(data, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket); //从头开始存,最大数量,none,接收到客户端后执行的回调函数,要传递的参数(会被传递给回调函数) //继续处理下一个客户端的连接,相当于一个伪递归 serverSocket.BeginAccept(AcceptCallBack, serverSocket); } catch (Exception e) { Console.WriteLine(e); if (serverSocket != null) serverSocket.Close(); } } /// /// 接收到客户端发送的数据时调用 /// static void ReceiveCallBack(IAsyncResult ar) { Socket clientSocket = null; try { clientSocket = ar.AsyncState as Socket; int count = clientSocket.EndReceive(ar); //正常关闭的情况 if (count == 0) { Console.WriteLine("一个客户端正常断开了连接"); clientSocket.Close(); return; } Console.WriteLine("接收到数据:" + Encoding.UTF8.GetString(data, 0, count)); clientSocket.BeginReceive(data, 0, 1024, SocketFlags.None, ReceiveCallBack, clientSocket); //从头开始存,最大数量,none,接收到客户端后执行的回调函数,要传递的参数 } catch (Exception e) { //非正常关闭的情况 Console.WriteLine(e); if (clientSocket != null) clientSocket.Close(); } } }}3、客户端namespace Tcp客户端{ class Program { static void Main(string[] args) { Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); EndPoint point = new IPEndPoint(IPAddress.Parse("192.168.1.3"), 5555); clientSocket.Connect(point); byte[] data = new byte[1024]; int length = clientSocket.Receive(data); Console.WriteLine(Encoding.UTF8.GetString(data, 0, length)); //循环向服务器发送数据 while (true) { string s = Console.ReadLine(); //输入c正常退出,直接按×异常退出 if (s == "c") { clientSocket.Close(); return; } clientSocket.Send(Encoding.UTF8.GetBytes(s)); } Console.ReadKey(); } }}4、效果

服务器可以接收多个客户端连接多个客户端都可以向服务器发送数据

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。