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

C# Socket的使用

C# 中的 System.Net.Sockets.Socket 类是 .NET Framework 提供的核心类,用于处理网络套接字编程。Socket 类是用于网络编程的基础类,它位于 System.Net.Sockets 命名空间中。

使用 Socket 类,可以创建客户端和服务器应用程序来进行基于TCP、UDP和其他网络协议的通信。

 

以下是如何在 C# 中使用 Socket 类进行基本的 TCP 服务器和客户端通信的步骤:

TCP 服务器端实现

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;namespace SocketServer
{class Program{private static byte[] buffer = new byte[1024];private static int port = 8885; // 定义服务器监听端口static void Main(string[] args){// 创建一个 IP 地址对象,绑定到本地主机IPAddress ipAddress = IPAddress.Parse("127.0.0.1");// 创建一个新的 Socket 对象,指定为 IPv4、面向流(TCP)协议Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);// 绑定服务器 socket 到特定的 IP 和端口IPEndPoint localEndPoint = new IPEndPoint(ipAddress, port);serverSocket.Bind(localEndPoint);// 开始监听连接请求,最大同时排队的连接数为 10serverSocket.Listen(10);Console.WriteLine($"启动监听 {serverSocket.LocalEndPoint} 成功");// 启动线程等待客户端连接Thread listenThread = new Thread(ListenForClients);listenThread.Start(serverSocket);// 等待控制台输入以保持程序运行Console.ReadLine();}private static void ListenForClients(object obj){Socket listener = (Socket)obj;while (true){// 接受一个客户端的连接请求Socket clientSocket = listener.Accept();// 发送欢迎消息给客户端string welcomeMessage = "ServerSayHello";byte[] data = Encoding.ASCII.GetBytes(welcomeMessage);clientSocket.Send(data);// 在单独的线程中处理来自客户端的消息Thread receiveThread = new Thread(ReceiveData);receiveThread.Start(clientSocket);}}private static void ReceiveData(object obj){Socket clientSocket = (Socket)obj;while (true){try{// 接收客户端发来的数据int received = clientSocket.Receive(buffer);// 将接收的数据转换为字符串并输出string message = Encoding.ASCII.GetString(buffer, 0, received);Console.WriteLine($"接收客户端 {clientSocket.RemoteEndPoint} 消息: {message}");// 实际应用中,这里可能需要对消息进行响应或进一步处理}catch (Exception ex){Console.WriteLine($"接收异常:{ex.Message}");// 关闭连接clientSocket.Shutdown(SocketShutdown.Both);clientSocket.Close();break;}}}}
}

TCP 客户端实现

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;namespace SocketClient
{class Program{private static byte[] buffer = new byte[1024];static void Main(string[] args){// 设置要连接的服务器地址和端口IPAddress ipAddress = IPAddress.Parse("127.0.0.1");int port = 8885;Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);try{// 连接到服务器clientSocket.Connect(new IPEndPoint(ipAddress, port));Console.WriteLine("连接服务器成功");// 接收服务器发送的消息int receiveLength = clientSocket.Receive(buffer);Console.WriteLine("接收服务器消息:{0}", Encoding.ASCII.GetString(buffer, 0, receiveLength));// 发送多条消息给服务器for (int i = 0; i < 10; i++){Thread.Sleep(1000); // 模拟延时string sendMessage = $"ClientSendMessageHelp{i} at {DateTime.Now}";byte[] data = Encoding.ASCII.GetBytes(sendMessage);clientSocket.Send(data);Console.WriteLine("向服务器发送消息:{0}", sendMessage);}}catch (Exception ex){Console.WriteLine("连接或通信过程中发生错误: {0}", ex.Message);}finally{// 关闭连接clientSocket.Shutdown(SocketShutdown.Both);clientSocket.Close();Console.WriteLine("发送完毕,按回车键退出...");Console.ReadLine();}}}
}

以上代码分别展示了如何创建一个简单的 TCP 服务器和客户端,服务器会监听客户端的连接请求,并在建立连接后与客户端交换数据。

客户端则尝试连接到服务器,并发送和接收数据。

 

请注意,使用Socket进行网络编程需要对网络协议和通信原理有一定的了解。

如果需要更复杂的网络通信功能,可能需要使用更高层次的网络库或框架,例如TcpClientTcpListener

 

Socket.Connected 不能作为TCP连接的判断依据

Socket.Connected 不能作为TCP连接的判断依据-CSDN博客

 

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

相关文章:

  • Spring Cloud + Vue前后端分离-第17章 生产打包与发布
  • 力扣热题100_普通数组_56_合并区间
  • Springcloud OpenFeign 的实现(二)
  • [C++]智能指针用法
  • 六、行列式基本知识
  • 中断系统(详解与使用)
  • uniapp开发微信小程序跳转到另一个小程序中
  • chatGPT 使用随想
  • unity Aaimation Rigging使用多个约束导致部分约束失去作用
  • 什么是ChatGPT
  • 当我们浪费时我们在浪费什么
  • 一文搞懂TCP三次握手与四次挥手
  • FairyGUI × Cocos Creator 3.7.3 引入报错解决
  • 网络原理 - HTTP/HTTPS(5)
  • 设计模式——抽象工厂模式
  • 详解编译和链接!
  • 力扣226 翻转二叉树 Java版本
  • 免费的数据恢复软件哪个好?这10个数据恢复软件可以试试
  • 力扣2476二叉搜索树最近节点查询
  • 板块一 Servlet编程:第六节 HttpSession对象全解 来自【汤米尼克的JAVAEE全套教程专栏】
  • 后端设计PNR一点总结
  • BI 数据分析,数据库,Office,可视化,数据仓库
  • 汽车信息安全--S32K3的HSE如何与App Core通信(1)?
  • arcgisPro制图输出
  • 产品化Chatgpt所面临的五大技术挑战
  • 8.qt5使用opencv的库函数打开图片
  • 学习 python的第四天,顺便分享两首歌:we don‘ talk anymore,You ‘re Still The One
  • uniapp:APP端webview拦截H5页面跳转,华为市场发布需要限制webview的H5页面跳转
  • [HTML]Web前端开发技术28(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页
  • 计算机网络实验六 OSPF