C# Socket基础(二) 之 服务器异步接收消息

 ManualResetEvent reviceManager = new ManualResetEvent(false);
 1 public void args_Completed(object sender, SocketAsyncEventArgs e)
 2  {
 3      //监听完成客户端的请求,一但监听到返回新的套接字
 4      var clientSocket = e.AcceptSocket;
 5      //启动线程获取客户端发来的消息
 6     if (clientSocket == null) return;
 7
 8      //这部分为接收消息
 9       var t = new Thread(GetClientMsg);
10      //设置线程为后台线程
11        t.IsBackground = true;
12       //启动线程
13        t.Start(clientSocket);
14       //显示信息
15       ShowMsg(clientSocket.RemoteEndPoint + "上线了");
16      //将事件状态设置为终止状态,允许一个或多个等待线程继续
17      manager.Set();
18  }

建议对照 C# Socket基础(一)之启动异步服务侦听 来看。

 1    private void GetClientMsg(object socket)
 2    {
 3        var socketClient = socket as Socket;
 4        if (socketClient == null) return;
 5         while (true)
 6          {
 7            try
 8              {
 9                  reviceManager.Reset();
10                  var bytes = new byte[1024 * 1024 * 4];
11                  var receiveArgs = new SocketAsyncEventArgs();            //设置缓冲区
12                   receiveArgs.SetBuffer(bytes, 0, bytes.Length);
13                   receiveArgs.Completed += receiveArgs_Completed;            //开始异步接收
14                   socketClient.ReceiveAsync(receiveArgs);
15                   reviceManager.WaitOne();
16               }
17               catch (Exception ex)
18               {
19
20                 //显示异常消息
21               ShowMsg(ex.Message);
22               }         }

      }

接收消息完成回调事件

1  void receiveArgs_Completed(object sender, SocketAsyncEventArgs e)
2   {
3      var socketClient = sender as Socket;
4      var bytes = e.Buffer;
5      ShowMsg(socketClient.RemoteEndPoint + "说:" + System.Text.Encoding.UTF8.GetString(bytes));
6      reviceManager.Set();
7   }

待续。下一篇:Socket基础(三)之客户端和服务器建立连接和接收消息

作者:gaobing

出处: http://gaobing.cnblogs.com

提示:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

C# Socket基础(二) 之 服务器异步接收消息

时间: 2024-08-05 12:59:52

C# Socket基础(二) 之 服务器异步接收消息的相关文章

C# Socket基础(一)之启动异步服务监听

本文主要是以代码为主..NET技术交流群 199281001 .欢迎加入. //通知一个或多个正在等待的线程已发生事件. ManualResetEvent manager = new ManualResetEvent(false); 1 //负责监听的套接字 private Socket socketServer; 2 /// <summary> 3 /// 启动服务 4 /// </summary> 5 private void CreateSocketService() 6 {

SpringFramework4系列之SpringJMS:(四)异步接收消息- 1.基本介绍

以往我们监听消息队列的时候,通常都是用EJB的MDB(Message-driven bean). 这需要EJB容器的支持. springframework4 使得 使用常规的POJO 就可以作为监听器 接收消息队列的信息了. 使用MDP 接收消息 Message-Driven Pojos 其实就是一种普通的POJO,只是实现了 MessageListener 接口. import javax.jms.JMSException; import javax.jms.Message; import j

SpringFramework4系列之SpringJMS:(四)异步接收消息 2.构建监听器

构建实现接口的监听器 编写监听器类并且实现监听器接口 public class ListenerDemo implements MessageListener {     public void onMessage(Message message) {         System.out.println(message.toString());     } } 注册MDP <!-- this is the Message Driven POJO (MDP) --> <bean id=&

Socket基础之-启动异步服务侦听

本文主要是以代码为主..NET技术交流群 199281001 .欢迎加入. //通知一个或多个正在等待的线程已发生事件. ManualResetEvent manager = new ManualResetEvent(false); 1 //负责监听的套接字 private Socket socketServer; 2 /// <summary> 3 /// 启动服务 4 /// </summary> 5 private void CreateSocketService() 6 {

C# Socket基础(四)之客户端向服务器发消息

private Socket socketClient;//客户端套接字,关于实例化请参考C# Socket基础(三)之客户端连接服务器和接收消息 客户端发送消息 1 /// <summary> 2 /// 发送数据到服务端 3 /// </summary> 4 private void Send() 5 { 6 if (socketClient == null) 7 { 8 9 ShowMsg("服务器未启动!"); 10 return; 11 } 12 by

消息队列技术终结者(四)—消息消费者以何种方式接收消息

消息消费者可以同步接收消息,也可以异步接收消息,一般而言,采用异步的方式接受消息优于采用同步的方式接受消息,体现在:        1.异步方式创建的网络流量比较小,单向推送消息并使之通过管道进入消息监听器.管道操作支持将多条消息聚合为一个网络调用.        2.异步方式使用线程比较少.异步方式在消息接收者不活动期间不使用线程.同步方式的消息接收者在接收调用期间内使用线程,结果线程可能会长时间保持空闲,尤其是该调用中指定了阻塞超时.        3.使用异步方式可以规避阻塞服务器上运行的

socket 异步接收连接和接收数据

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Net.Sockets; using Syst

Python Socket基础学习,注意,需要先开服务器程序,在开客户端程序,

服务器端 # -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' from socket import * from time import * HOST='' PORT=1122#侦听端口 BUFSIZ=1024 ADDR=(HOST,PORT) sock=socket(AF_INET,SOCK_STREAM) sock.bind(ADDR) sock.listen(5) #条件 STOP_CHAT=False whi

socket基础

socket基础 SocketServer socket基础 写个自己的一句话,记得在封装传递的时候用上getattr等 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket