当前位置: 首页 > news >正文

C# Socket通讯简单Demo

C# Socket通讯简单Demo

  • Client端
  • Listener端

Client端

static void Main(string[] args)
{XSocketService XSocketService = new XSocketService();XSocketService.Init();while (true){Console.Write("请输入消息:");var msg = Console.ReadLine();XSocketService.SendMessageToListener(msg);}//XSocketService.Dispose();
}
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;public class XSocketService : IDisposable
{public static Socket ClientSocket;public void Init(){ConnectToListener();Thread tQureyStatus = new Thread(ReceiveMessageFromListener);tQureyStatus.IsBackground = true;tQureyStatus.Start();}public void Dispose() { ClientSocket.Close(); }public void SendMessageToListener(string message){byte[] buffer = Encoding.UTF8.GetBytes(message);int length = ClientSocket.Send(buffer);Console.WriteLine("SendMessageToListener length: " + length + ", szContent: " + message);}private void ConnectToListener(){ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);IPEndPoint iPEndPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);   // 创建IP地址和端口号ClientSocket.Connect(iPEndPoint);  // 绑定IP地址和端口号Console.WriteLine("Connect ToListener Succeed!");}private void ReceiveMessageFromListener(){while (true){int length = ClientSocket.Available;byte[] receiveInfo = new byte[length];length = ClientSocket.Receive(receiveInfo);if (length <= 0){Console.WriteLine("ReceiveMessageFromListener receive info length <= 0,length: " + length);continue;}string message = Encoding.UTF8.GetString(receiveInfo, 0, length);Console.WriteLine("ReceiveMessageFromClient length: " + length + ", message: " + message);}}
}

Listener端

static void Main(string[] args)
{XSocketService XSocketService = new XSocketService();XSocketService.Init();while (true){Console.Write("请输入消息:");var msg = Console.ReadLine();XSocketService.SendMessageToClient(msg);}//XSocketService.Dispose();
}
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;public class XSocketService : IDisposable
{public static Socket ClientSocket;public static Socket ListenerSocket;public void Init(){WaitConnect();Thread tQureyStatus = new Thread(ReceiveMessageFromClient);tQureyStatus.IsBackground = true;tQureyStatus.Start();}public void Dispose() { ClientSocket.Close();ListenerSocket.Close();}public void SendMessageToClient(string message){byte[] buffer = Encoding.UTF8.GetBytes(message);int length = ListenerSocket.Send(buffer);Console.WriteLine("SendMessageToListener length: " + length + ", message: " + message);}private void WaitConnect(){ClientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);  // 创建Socket对象IPEndPoint endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8888);   // 创建IP地址和端口号ClientSocket.Bind(endPoint);  // 绑定IP地址和端口号ClientSocket.Listen(10);  // 开始监听Console.WriteLine("Listener wait client connect...");ListenerSocket = ClientSocket.Accept();  // 接受客户端连接Console.WriteLine("Listener client connected.");}private void ReceiveMessageFromClient(){while (true){int length = ListenerSocket.Available;byte[] receiveInfo = new byte[length];length = ListenerSocket.Receive(receiveInfo);if (length <= 0){Console.WriteLine("ReceiveMessageFromClient receive info length <= 0,length: " + length);continue;} string message = Encoding.UTF8.GetString(receiveInfo, 0, length);Console.WriteLine("ReceiveMessageFromClient length: " + length + ", message: " + message);}}}
  • C#中的Socket类是用于网络编程的重要类之一,其Available属性是指当前Socket缓冲区中可用的字节数。
    该属性可以用于检查接收缓冲区中是否有可用的数据,以便进行相应的处理。

  • 当Socket接收到数据时,它会存储在缓冲区中,而Available属性可以让我们知道缓冲区中有多少数据可供读取。
    通过检查Available属性,我们可以确定是否需要读取缓冲区中的数据,以及可以读取多少数据。

http://www.lryc.cn/news/375529.html

相关文章:

  • 视频融合共享平台LntonCVS视频监控管理平台技术方案详细介绍
  • C#ListView的单元格支持添加基本及自定义任意控件
  • 数据库选型实践:如何避开分库分表痛点 | OceanBase用户实践
  • 3个火火火的AI项目,开源了!
  • 算法 | 子集数排列树满m叉树二分搜索归并排序快速排序
  • SpringBoot配置第三方专业缓存技术jetcache方法缓存方案
  • 游戏开发丨基于PyGame的消消乐小游戏
  • 软件项目管理概述
  • FastAdmin后台开发框架 lang 任意文件读取漏洞复现
  • 数字时代PLM系统的重要性
  • 安卓实现圆形按钮轮廓以及解决无法更改按钮颜色的问题
  • 常用原语介绍
  • 29. 透镜阵列
  • 深入理解并打败C语言难关之一————指针(3)
  • Ubuntu-24.04-live-server-amd64启用ssh
  • Leetcode 2786. 访问数组中的位置使分数最大(DP 优化)
  • 【docker实战】使用Dockerfile的COPY拷贝资源遇到的问题
  • 如何用多线程执行 unittest 测试用例实现方案
  • Ascend310 EP模式下容器内进行推理测试
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • Java基础之Math与Array类与System
  • 警告:Hydration attribute mismatch on Note: this mismatch is check-only.(水合不匹配)
  • 【机器学习】CART决策树算法的核心思想及其大数据时代银行贷款参考案例——机器认知外界的重要算法
  • 编程软件是由什么编程的
  • 如何查看自己本地ip
  • 高考分数限制下,选好专业还是选好学校?
  • Django学习(2)项目实战
  • pdf格式转成jpg图片,pdf格式如何转jpg
  • Java的三个接口Comparable,Comparator,Cloneable(浅拷贝与深拷贝)
  • pytorch学习笔记7