C#Socket处理多个连接
来源:互联网 发布:字有几个字节知乎 编辑:程序博客网 时间:2024/06/06 18:17
Socket监听多个连接并进行处理]
思路:
1.创建一个Socket对象用于服务器监听客户端的连接
2.当有客户端连接上之后,新开一个线程为不停的去接受该连接发送的消息 并进行处理
3.服务端的Socket对象继续监听其他客户端的连接
4.服务器端每监听到一个连接,就创建一个线程为该连接进行处理 实现Socket监听多个连接
理解上面的思路 如果你对一定基础,应该就能自己写出来了...
代码:
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Net;using System.Net.Sockets;using System.Text;using System.Threading;using System.Threading.Tasks;using System.Windows.Forms;namespace Socket服务器_updateVision{ public partial class Form1 : Form { public Form1() { InitializeComponent(); Control.CheckForIllegalCrossThreadCalls = false;//允许跨线程访问控件 } private Socket _serverSocket;//Socket服务器 private DictionaryDict_SocketList = new Dictionary ();//用于存储已连接的客户端 private int count = 0; //用做Socket键值对的键 private void btn_startListen_Click(object sender, EventArgs e) { //一.开始监听客户端的连接 //1.Ip地址 IPAddress ip = IPAddress.Parse(txt_Ip.Text); //2.端口号 int port = int.Parse(txt_port.Text); //3.窗创建服务器的Socket对象 _serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); //4.绑定IP地址和端口号 _serverSocket.Bind(new IPEndPoint(ip, port)); //5.设置监听数 _serverSocket.Listen(3939); //6.新开一个线程去监听客户端连接 Thread threadListen = new Thread(StartListen); threadListen.IsBackground = true; threadListen.Start(); //二.如果客户端已连接上 则创建一个与之进行通信的Socket //三.服务器继续监听连接 } private void StartListen() { while (true) { //开始监听客户端连接 txt_log.AppendText("开始监听客户端连接"+"\r\n"); this.count++; Socket Connect_Socket = _serverSocket.Accept();//开始监听 txt_log.AppendText("\r\n"+"客户端" + Connect_Socket.LocalEndPoint.ToString() + "已连接" + "\r\n"); Dict_SocketList.Add(count, Connect_Socket);//m //将已有的Socket连接添加到ListBox列表中显示 for (int i = Dict_SocketList.Count; i <= Dict_SocketList.Count; i++) { list_connect.Items.Add(Dict_SocketList[i].LocalEndPoint.ToString()); } //监听连接完成后 新开一个线程与该客户端进行通信 然后服务器开始监听其他连接 Thread connectSocket = new Thread(new ParameterizedThreadStart(Communication)); connectSocket.Start(Connect_Socket); } } /// /// 开始接收客户端发送过来的数据 /// /// private void Communication(Object socket) { Socket connect = socket as Socket;//处理客户端连接的Socket对象 int len=0; while (true) { //开始接收数据 Byte[] Receive_Msg = new byte[1024 * 1024]; //如果该连接正在 数据 而客户端已断开连接 会抛出一个异常 try { //len表示接受到的数据长度 len = connect.Receive(Receive_Msg, Receive_Msg.Length, SocketFlags.None); } catch (Exception) { //将日志信息打印到文本框中 txt_log.AppendText("\r\n"+connect.LocalEndPoint.ToString() + "已断开连接" + "\r\n"); connect.Close(); connect.Dispose(); break; } if (len > 0)//说明已接收到数据 { //打印接受的消息到文本框中 txt_log.AppendText("\r\n"+Encoding.Default.GetString(Receive_Msg, 0, Receive_Msg.Length)+"\r\n"); } } } }}
:
客户端代码:
private static byte[] result;
private static Socket clineSocket;
private static byte[] msg;
private void Window_Loaded(object sender, RoutedEventArgs e)
{
//初始化IP地址
//ip = IPAddress.Parse(txt_ip.Text);
//port = int.Parse(txt_port.Text);
}
private void btn_connce_Click(object sender, RoutedEventArgs e)
{
//创建一个与服务器通信的Socket
clineSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
clineSocket.Connect(new IPEndPoint(IPAddress.Parse(txt_ip.Text),int.Parse(txt_port.Text)));
MessageBox.Show("连接成功!");
}
private void btn_send_Click(object sender, RoutedEventArgs e)
{
//获取文本框的消息
msg=Encoding.Default.GetBytes(txt_msg.Text);
clineSocket.Send(msg, 0, msg.Length,SocketFlags.None);
txt_msg.Text = ""+"\n";
}
- C#Socket处理多个连接
- socket模型处理多个客户端
- socket多个连接与多个线程
- 线程池实现处理多个连接
- 非阻塞Socket连接处理
- socket connec连接超时处理
- IOS编程Socket连接处理
- socket connec连接超时处理
- socket 连接超时处理 java
- CMap 的使用(管理多个Socket的连接)
- Socket服务端接受多个客户端的连接(.NET)
- socket实现多个客户端连接在一个服务器上
- ucos下建立socket服务器端,接受多个连接
- android连接socket服务器上传下载多个文件
- 通过Socket连接一次传输多个文件
- Java Socket实现多个客户端连接同一个服务端
- java Socket 多个客户端连接同一个服务端
- Binder连接池连接多个AIDL文件的处理
- nginx
- 大学真的是该放松的时候吗?
- [算法]Gale-Shapley Algorithm-稳定匹配算法的设计、实现与探讨(下)
- xml和Json的优缺点
- Eye’On开发心得 (一)
- C#Socket处理多个连接
- 栈的定义和基本算法库的建立
- scipy安装失败!!!
- 关于关于ssh -T git@github.com连接GitHub失败,以及Permission denied (publickey)问题
- LOI 日常计划(欢迎监督)
- Python 字典及其操作(dict)
- printf的用法及特点
- MySQL的分区总结
- 连接管理