C# Socket异步通信demo,一个服务器对应多个客户端
来源:互联网 发布:json与javascript 编辑:程序博客网 时间:2024/05/18 22:41
最近做了个客户端和服务器通信的小程序,按照惯例,下面是程序界面,可以看到现在开了两个客户端,一个是127.0.0.1:2026,另一个是127.0.0.1:2030。源码服务listen可以自定义客户端数。demo下载通道http://download.csdn.net/detail/wuma0q1an/9478564
之前看到别人类似的程序,服务端和客户端采用相同的回调函数,可以是可以。但是服务端就不能接受到多个客户端的信息了,所以在demo里面改良了下
/// <summary> /// 连接到客户端 /// </summary> /// <param name="socket"></param> private void AsyncAccept(object socket) { Socket thissocket = (Socket)socket; thissocket.BeginAccept(asyncResult => { //获取客户端套接字 Socket client = thissocket.EndAccept(asyncResult); ReceiveMessage(client); }, null); }
下面是一些关键代码,当然你比较懒的话可以去下载我的demohttp://download.csdn.net/detail/wuma0q1an/9478564
1.开始监听
public void Start() { IPAddress ip = IPAddress.Parse(txtIp.Text.ToString()); myProt = int.Parse(txtPort.Text.Trim()); serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); serverSocket.Bind(new IPEndPoint(ip, myProt)); serverSocket.Listen(100); UpdateTxtMethod(string.Format("已启动服务器,启动监听{0}成功", serverSocket.LocalEndPoint.ToString())); myThread = new Thread(ListenClientConnect); myThread.Start(); }2.监听线程
/// <summary> /// 监听客户端连接 /// </summary> private void ListenClientConnect() { while (true) { Socket clientSocket = serverSocket.Accept(); Thread receiveThread = new Thread(ReceiveMessage); receiveThread.Start(clientSocket); } }
3.收到信息处理
private void ReceiveMessage(object clientSocket) { Socket myClientSocket = (Socket)clientSocket; while (!myClientSocket.Poll(10, SelectMode.SelectRead)) { try { var buffer = new byte[1024];//设置一个缓冲区,用来保存数 myClientSocket.BeginReceive(buffer, 0, buffer.Length, SocketFlags.None, new AsyncCallback((ar) => { try { var length = myClientSocket.EndReceive(ar); //读取出来消息内容 var message = Encoding.ASCII.GetString(buffer, 0, length); if (message.Trim() != "" && message != null) { updateTxt = new UpdateTxt(UpdateTxtMethod); this.BeginInvoke(updateTxt, string.Format("接收客户端{0}消息:{1}", myClientSocket.RemoteEndPoint.ToString(), message)); } } catch { } }), null); } catch (Exception ex) { Console.WriteLine(ex.Message); myClientSocket.Shutdown(SocketShutdown.Both); myClientSocket.Close(); break; } } }
所以,整个流程大概如上~
0 1
- C# Socket异步通信demo,一个服务器对应多个客户端
- 非阻塞socket对应的多线程服务器的实现---一个服务器如何与多个客户端进行通信?
- Socket 编程,一个服务器,多个客户端,互相通信(分享)
- Socket 编程,一个服务器,多个客户端,互相通信
- java Socket 一个服务器与多个客户端进行通信
- Socket 编程,一个服务器,多个客户端,互相通信
- Socket客户端,服务器通信demo
- C#一个服务器端多个客户端Socket通信
- C# Socket简单例子(服务器与多个客户端通信)
- C# winform socket一个服务端和多个客户端进行通信
- C# winform socket一个服务端和多个客户端进行通信
- Java Socket多个客户端与服务器通信
- C# Socket通信客户端类、服务器类
- C# Socket编程 一个简单的Socket 客户端服务器通信架构
- 客户端服务器通信demo
- Unity中的Socket通信(多个客户端的异步通信)
- Socket+NIO实现客户端与服务器的通信的Demo
- linux 下socket 服务器和客户端异步通信
- Java ConcurrentMap 源码分析
- 多线程
- 论指针与数组
- 【BZOJ1116】[POI2008]CLO【BFS】
- Hive(一个数据仓库)
- C# Socket异步通信demo,一个服务器对应多个客户端
- struts2中<s:select>标签的使用
- 浅析Motion Design
- MFC->字符的编码方式
- 视频编码解码学习之二:编解码框架
- java.util.concurrent.CountDownLatch
- Python中遇到"UnicodeDecodeError: ‘gbk’ codec can’t decode bytes in position 2-3: illegal multibyte sequ
- #define和typedef的区别和用法
- 熬夜并不值得程序员炫耀