服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C# - C#实现套接字发送接收数据

C#实现套接字发送接收数据

2022-12-09 12:58普通还不自信的程序员 C#

这篇文章主要为大家详细介绍了C#实现套接字发送接收数据,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了C#实现套接字发送接收数据的具体代码。

 

服务端

C#实现套接字发送接收数据

namespace TestServer
{
  public partial class ServerForm : Form
  {
      Socket socketSend;
      // 将远程连接的客户端的IP地址和socket存入集合
      Dictionary<string, Socket> dicSocket = new Dictionary<string, Socket>();
      public ServerForm()
      {
          InitializeComponent();
      }

      private void btnStart_Click(object sender, EventArgs e)
      {
          try
          {
              // 当点击开始监听后,在服务器创建一个负责监听IP地址和端口号的socket
              Socket socketWatch = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
              IPAddress ip = IPAddress.Any;//;IPAddress.Parse(txtServer.Text)
              IPEndPoint point = new IPEndPoint(ip, Convert.ToInt32(txtPort.Text));
              // 监听
              socketWatch.Bind(point);
              ShowMsg("监听成功");
              socketWatch.Listen(10);
              Thread th = new Thread(Listen);
              th.IsBackground = true;
              th.Start(socketWatch);
          }
          catch { }
      }

      void Listen(object o)
      {
          // 等待客户端连接 并创建一个负责通信的Socket
          Socket socketWatch = o as Socket;
          while (true)
          {
              socketSend = socketWatch.Accept();
              dicSocket.Add(socketSend.RemoteEndPoint.ToString(),socketSend);
              cboUsers.Items.Add(socketSend.RemoteEndPoint.ToString());
              ShowMsg(socketSend.RemoteEndPoint.ToString() + " : " + "连接成功");
              Thread th = new Thread(Recive);
              th.IsBackground = true;
              th.Start(socketSend);
          }
      }
      
      void Recive(object o)
      {
          socketSend = o as Socket;
          while (true)
          {
              // 客户端连接成功后,服务器应接受客户端发来的消息
              byte[] buffer = new byte[1024 * 1024 * 2];
              // 实际接收到的有效字节数
              int r = socketSend.Receive(buffer);
              if (r == 0)
              {
                  break;
              }
              string str = Encoding.UTF8.GetString(buffer, 0, r);
              ShowMsg(socketSend.RemoteEndPoint + " : " + str);
          }
      }

      

      void ShowMsg(string str)
      {
          txtLog.AppendText(str + "\r\n");
      }

      private void Form1_Load(object sender, EventArgs e)
      {
          Control.CheckForIllegalCrossThreadCalls = false;
      }

      private void btnSend_Click(object sender, EventArgs e)
      {
          string str = txtMsg.Text;
          byte[] buffer = Encoding.UTF8.GetBytes(str);
          string ip = cboUsers.SelectedItem.ToString();
          dicSocket[ip].Send(buffer);
          //socketSend.Send(buffer);
          txtMsg.Text = "";
      }

      private void btnSendUser_Click(object sender, EventArgs e)
      {
          string json = JsonConvert.SerializeObject(UserList());
          byte[] buffer = Encoding.UTF8.GetBytes(json);
          socketSend.Send(buffer);
      }

      private List<User> UserList()
      {
          List<User> userList = new List<User>();
          User user = null;
          string sql = "select * from user_table";
          SqlCommand cmd = SqlUtils.ConnectSql(sql);
          SqlDataReader sdr = cmd.ExecuteReader();
          while (sdr.Read())
          {
              user = new User(sdr.GetInt32(0), sdr.GetString(1), sdr.GetString(2), sdr.GetInt32(3));
              userList.Add(user);
          }
          return userList;
      }

  }
}

 

客户端

C#实现套接字发送接收数据

namespace TestClient
{
  public partial class ClientForm : Form
  {
      Socket socketSend;
      public ClientForm()
      {
          InitializeComponent();
      }

      private void btnStart_Click(object sender, EventArgs e)
      {
          try
          {
              // 创建负责通信的socket
              socketSend = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
              IPAddress ip = IPAddress.Parse(txtServer.Text);
              IPEndPoint point = new IPEndPoint(ip,Convert.ToInt32(txtPort.Text));
              socketSend.Connect(point);
              ShowMsg("连接成功");
              Thread th = new Thread(Recive);
              th.IsBackground = true;
              th.Start();
          }
          catch { }
      }

      void Recive()
      {
          while (true)
          {
              // 客户端连接成功后,服务器应接受客户端发来的消息
              byte[] buffer = new byte[1024 * 1024 * 2];
              // 实际接收到的有效字节数
              int r = socketSend.Receive(buffer);
              if (r == 0)
              {
                  break;
              }
              string str = Encoding.UTF8.GetString(buffer, 0, r);
              ShowMsg(socketSend.RemoteEndPoint + " : " + str);
          }
      }

      void ShowMsg(string str)
      {
          txtLog.AppendText(str + "\r\n");
      }

      private void Form1_Load(object sender, EventArgs e)
      {
          Control.CheckForIllegalCrossThreadCalls = false;
      }

      private void btnSend_Click(object sender, EventArgs e)
      {
          string str = txtMsg.Text.Trim();
          byte[] buffer = Encoding.UTF8.GetBytes(str);
          socketSend.Send(buffer);
          txtMsg.Text = "";
      }
  }
}

效果

C#实现套接字发送接收数据

发送json数据

C#实现套接字发送接收数据

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/qq_41841482/article/details/114441393

延伸 · 阅读

精彩推荐
  • C#浅析C#静态类,静态构造函数,静态变量

    浅析C#静态类,静态构造函数,静态变量

    这篇文章主要介绍了浅析C#静态类,静态构造函数,静态变量 的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下...

    jerrylsxu7522021-11-24
  • C#UGUI ScrollRect滑动定位优化详解

    UGUI ScrollRect滑动定位优化详解

    这篇文章主要为大家详细介绍了UGUI ScrollRect滑动定位优化,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Stephanie_19252022-09-03
  • C#C#框架winform实现简单点餐系统

    C#框架winform实现简单点餐系统

    这篇文章主要为大家详细介绍了C#框架winform实现简单点餐系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    不染-何程龙6412022-11-27
  • C#C#创建安全的字典(Dictionary)存储结构

    C#创建安全的字典(Dictionary)存储结构

    本文主要对存储结构字典(Dictionary)的一些常用方法进行简单的说明,并阐述了如何创建安全的字典(Dictionary)存储结构。希望对大家有所帮助...

    彭泽090210702021-12-13
  • C#UGUI实现4位验证码输入

    UGUI实现4位验证码输入

    这篇文章主要为大家详细介绍了UGUI实现4位验证码输入,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    DoyoFish11562022-08-11
  • C#Unity游戏之存储数据

    Unity游戏之存储数据

    这篇文章主要介绍了Unity游戏之存储数据,感兴趣的同学,可以拷贝代码,试验一下...

    510022639092022-11-14
  • C#利用C#编写Linux守护进程实例代码

    利用C#编写Linux守护进程实例代码

    如今的编程是一场程序员和上帝的竞赛,程序员要开发出更大更好、傻瓜都会用到软件,下面这篇文章主要给大家介绍了关于利用C#编写Linux守护进程的相关...

    Chaunce7402022-02-19
  • C#C# DateTime.ToString根据不同语言生成相应的时间格式

    C# DateTime.ToString根据不同语言生成相应的时间格式

    本文分享了一个按照不同国家的语言生成相应时间格式的案例,有需要做国外网站或者多国语言网站的朋友可以参考一下。...

    jerrylsxu6192021-11-16