C#编写Socket服务器
创始人
2025-01-21 02:07:27
0次

1.Socket介绍

所谓套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口 

2.Socket一般应用模式(服务器端和客户端)

3.Socket的通讯过程

4.Socket通信基本流程图:

5.项目界面设计:

6.实现核心代码

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; using System.Net.Sockets;  namespace TCPProgect {     public partial class FrmServer : Form     {         public FrmServer()         {             InitializeComponent();         }                  //第一步:调用socket()函数创建一个用于通信的套接字         private Socket listenSocket;          //字典集合:存储IP和Socket的集合         private Dictionary OnLineList = new Dictionary();          //当前时间         private string CurrentTime         {             get { return DateTime.Now.ToString("HH:mm:ss") + Environment.NewLine; }         }          //编码格式         Encoding econding = Encoding.Default;           private void btn_StartService_Click(object sender, EventArgs e)         {             //第一步:调用socket()函数创建一个用于通信的套接字             listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);              //第二步:给已经创建的套接字绑定一个端口号,这一般通过设置网络套接口地址和调用Bind()函数来实现             IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse(this.txt_IP.Text.Trim()), int.Parse(this.txt_Port.Text.Trim()));              try             {                 listenSocket.Bind(endPoint);             }             catch (Exception ex)             {                 MessageBox.Show("服务器开启失败:" + ex.Message, "开启服务器");                 return;             }              //第三步:调用listen()函数使套接字成为一个监听套接字             listenSocket.Listen(10);              ShowMessage("服务器开启成功");              //开启一个线程监听             Task.Run(new Action(() =>                 {                     ListenConnection();                 }                 ));              this.btn_StartService.Enabled = false;           }          private void ListenConnection()         {             while (true)             {                 Socket clientSocket = listenSocket.Accept();                  string ip = clientSocket.RemoteEndPoint.ToString();                  //更新在线列表                 AddOnLine(ip, true);                 //更新在线列表集合                 OnLineList.Add(ip, clientSocket);                  ShowMessage(ip + "上线了");                  Task.Run(() => ReceiveMsg(clientSocket));              }           }           ///          /// 接收方法         ///          ///          private void ReceiveMsg(Socket clientSocket)         {             while (true)             {                 //定义一个2M的缓冲区                 byte[] buffer = new byte[1024 * 1024 * 2];                  int length = -1;                 try                 {                     length = clientSocket.Receive(buffer);                 }                 catch (Exception)                 {                      //客户端下线了                      //更新在线列表                     string ip = clientSocket.RemoteEndPoint.ToString();                      AddOnLine(ip, false);                      OnLineList.Remove(ip);                      break;                 }                  if (length == 0)                 {                     //客户端下线了                      //更新在线列表                     string ip = clientSocket.RemoteEndPoint.ToString();                      AddOnLine(ip, false);                      OnLineList.Remove(ip);                      break;                 }                   if (length > 0)                 {                     string info = econding.GetString(buffer, 0, length);                     ShowMessage(info);                 }             }         }          ///          /// 在线列表更新         ///          ///          ///          private void AddOnLine(string clientIp, bool value)         {             Invoke(new Action(() =>             {                 if (value)                 {                     this.lst_Online.Items.Add(clientIp);                 }                 else                 {                     this.lst_Online.Items.Remove(clientIp);                 }              }));          }           ///          /// 更新接收区         ///          ///          private void ShowMessage(string info)         {             Invoke(new Action(() =>             {                 this.txt_Rcv.AppendText(CurrentTime + info + Environment.NewLine);             }));          }          ///          /// 消息发送         ///          ///          ///          private void btn_Send_Click(object sender, EventArgs e)         {             if (this.lst_Online.SelectedItem != null)             {                 foreach (string item in this.lst_Online.SelectedItems)                 {                     if (OnLineList.ContainsKey(item))                     {                         OnLineList[item].Send(econding.GetBytes(this.txt_Send.Text.Trim()));                     }                 }             }             else             {                 MessageBox.Show("请先选择要发送的对象", "发送消息");             }          }          ///          /// 群发功能         ///          ///          ///          private void btn_SendAll_Click(object sender, EventArgs e)         {             foreach (string item in this.lst_Online.Items)             {                 if (OnLineList.ContainsKey(item))                 {                     OnLineList[item].Send(econding.GetBytes(this.txt_Send.Text.Trim()));                 }             }         }     } } 

7.运行效果

        7.1 运行界面演示

         7.2 接收消息界面演示

         7.3 发送消息界面演示

         7.4 群发消息演示

源码地址:https://download.csdn.net/download/m0_73500215/89143273

如果你觉得我的分享有价值,那就请为我点赞收藏吧!你们的支持是我继续分享的动力。希望大家能够积极评论,让我知道你们的想法和建议。谢谢!

相关内容

热门资讯

科技分享开挂!友友联盟辅助透视... 您好,友友联盟这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩家在这款...
做出回应透视挂!小小辅助透视挂... 做出回应透视挂!小小辅助透视挂,攒劲甘肃麻将是真的有外挂,好像有挂方略小小透视方法中分为三种模型:小...
盘点一款透视挂!禾城麻将辅助透... 盘点一款透视挂!禾城麻将辅助透视挂,星乐麻将是真的有外挂,一直有挂技术1、首先打开禾城麻将辅助器下载...
据文件显示辅助!玖乐游戏辅助透... 据文件显示辅助!玖乐游戏辅助透视挂,奕趣存在有外挂,总是有人有挂1、全新机制【玖乐游戏ai辅助工具激...
揭秘开挂!赫麒众游辅助透视挂,... 揭秘开挂!赫麒众游辅助透视挂,嘻游联盟真的是有外挂,好像揭秘有挂1、下载好赫麒众游脚本下载之后点击打...
一分钟揭秘开挂!闲乐辅助透视挂... 您好,闲乐这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多玩家在这款游戏...
推荐十款开挂!三哥玩辅助透视挂... 推荐十款开挂!三哥玩辅助透视挂,陕西丫丫麻将是有外挂,其实有挂技巧1、下载好三哥玩正确养号方法之后点...
实测教程开挂!叮叮娱乐辅助透视... 实测教程开挂!叮叮娱乐辅助透视挂,牌缘南通长牌真的是有外挂,果然了解有挂1、牌缘南通长牌辅助软件下载...
做出回应开挂!天和娱乐辅助透视... 做出回应开挂!天和娱乐辅助透视挂,新天涯确实有外挂,其实确实有挂亲,关键说明,天和娱乐透视脚本安卓赛...
玩家必备教程辅助!逗娱碰胡辅助... 玩家必备教程辅助!逗娱碰胡辅助透视挂,多米贵阳麻将真的是有外挂,真是有挂教程逗娱碰胡破解侠是真的助透...