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

TCP服务器与客户端三种方法实现

TCP服务器和客户端的作用

TCP服务器和客户端是网络通信中的两个核心组件,用于实现可靠的数据传输。服务器端负责监听并处理客户端的连接请求,客户端则主动发起连接请求。TCP协议确保数据的有序性、可靠性和完整性,适用于需要稳定传输的场景(如文件传输、网页访问等)。


使用Socket实现TCP服务器和客户端

TCP服务器端代码(C#)
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;class TcpServer
{static void Main(){IPAddress ipAddress = IPAddress.Parse("127.0.0.1");int port = 8080;// 创建Socket并绑定IP和端口Socket serverSocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);serverSocket.Bind(new IPEndPoint(ipAddress, port));serverSocket.Listen(10); // 设置最大等待连接数Console.WriteLine("服务器已启动,等待客户端连接...");// 接受客户端连接Socket clientSocket = serverSocket.Accept();Console.WriteLine($"客户端已连接: {clientSocket.RemoteEndPoint}");// 接收数据byte[] buffer = new byte[1024];int bytesReceived = clientSocket.Receive(buffer);string receivedData = Encoding.UTF8.GetString(buffer, 0, bytesReceived);Console.WriteLine($"收到数据: {receivedData}");// 发送响应string response = "服务器已收到消息";clientSocket.Send(Encoding.UTF8.GetBytes(response));// 关闭连接clientSocket.Shutdown(SocketShutdown.Both);clientSocket.Close();serverSocket.Close();}
}

TCP客户端代码(C#)
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;class TcpClient
{static void Main(){IPAddress ipAddress = IPAddress.Parse("127.0.0.1");int port = 8080;// 创建Socket并连接服务器Socket clientSocket = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp);clientSocket.Connect(new IPEndPoint(ipAddress, port));Console.WriteLine("已连接到服务器...");// 发送数据string message = "Hello, Server!";clientSocket.Send(Encoding.UTF8.GetBytes(message));// 接收响应byte[] buffer = new byte[1024];int bytesReceived = clientSocket.Receive(buffer);string response = Encoding.UTF8.GetString(buffer, 0, bytesReceived);Console.WriteLine($"服务器响应: {response}");// 关闭连接clientSocket.Shutdown(SocketShutdown.Both);clientSocket.Close();}
}


使用TcpListener和TcpClient实现(更高层封装)

TCP服务器端(TcpListener)
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;class TcpServer
{static void Main(){TcpListener server = new TcpListener(IPAddress.Parse("127.0.0.1"), 8080);server.Start();Console.WriteLine("服务器已启动,等待客户端连接...");TcpClient client = server.AcceptTcpClient();Console.WriteLine($"客户端已连接: {((IPEndPoint)client.Client.RemoteEndPoint).Address}");NetworkStream stream = client.GetStream();byte[] buffer = new byte[1024];int bytesRead = stream.Read(buffer, 0, buffer.Length);string receivedData = Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.WriteLine($"收到数据: {receivedData}");string response = "服务器已收到消息";stream.Write(Encoding.UTF8.GetBytes(response), 0, response.Length);stream.Close();client.Close();server.Stop();}
}

TCP客户端(TcpClient)
using System;
using System.Net.Sockets;
using System.Text;class TcpClient
{static void Main(){System.Net.Sockets.TcpClient client = new System.Net.Sockets.TcpClient("127.0.0.1", 8080);Console.WriteLine("已连接到服务器...");NetworkStream stream = client.GetStream();string message = "Hello, Server!";stream.Write(Encoding.UTF8.GetBytes(message), 0, message.Length);byte[] buffer = new byte[1024];int bytesRead = stream.Read(buffer, 0, buffer.Length);string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);Console.WriteLine($"服务器响应: {response}");stream.Close();client.Close();}
}


关键步骤说明

服务器端流程

  • 创建Socket或TcpListener并绑定IP/端口。
  • 监听客户端连接请求(AcceptAcceptTcpClient)。
  • 通过NetworkStream或Socket接收/发送数据。
  • 关闭连接和资源。

客户端流程

  • 创建Socket或TcpClient并连接服务器。
  • 通过NetworkStream或Socket发送/接收数据。
  • 关闭连接和资源。

两种方式均能实现TCP通信,Socket提供更底层控制,而TcpListener/TcpClient封装了细节,更适合快速开发。

还可使用开源类库SimpleTCP

SimpleTCP的优点

SimpleTCP是一个轻量级的C#网络库,简化了TCP通信的开发流程。
封装了底层Socket的复杂性,提供简洁的API。
支持异步操作,适合处理高并发场景。
内置消息分割机制(如基于分隔符或固定长度),避免粘包问题。

SimpleTCP的缺点

依赖.NET环境,跨平台支持有限(需配合Mono等工具)。
功能较基础,复杂需求(如加密、压缩)需自行扩展。
文档和社区资源较少,调试可能依赖源码。

最后更新时间是2017年,不过库的功能比较简单、单一,也没那么多更新的内容。

底层是基于TcpClient的,性能注定不会太高,但能用TcpClient的地方都可以用它。


创建SimpleTCP服务器代码

using SimpleTCP;
using System;class ServerExample
{static void Main(){var server = new SimpleTcpServer().Start(9000);server.DataReceived += (sender, msg) => {Console.WriteLine($"收到消息: {msg.MessageString}");msg.ReplyLine("服务器已接收");};Console.WriteLine("服务器启动,按任意键退出...");Console.ReadKey();server.Stop();}
}

创建SimpleTCP客户端代码

using SimpleTCP;
using System;class ClientExample
{static void Main(){var client = new SimpleTcpClient();client.Connect("127.0.0.1", 9000);client.WriteLine("Hello Server!");var reply = client.ReadLine();Console.WriteLine($"服务器回复: {reply}");client.Disconnect();}
}


关键说明

服务器需监听端口并处理DataReceived事件,客户端通过Connect建立连接。
MessageString自动处理编码转换(默认UTF-8)。
ReplyLine用于服务器直接回复当前客户端。

如需更复杂功能(如自定义协议),可扩展SimpleTcpServerSimpleTcpClient类。

http://www.xdnf.cn/news/15105.html

相关文章:

  • Linux权限的概念
  • SM712.TCT Semtech TVS二极管——电子设备的终极电路守护
  • DNS(Domain Name System,域名系统)
  • 计算机毕业设计ssm晋中大学城校园论坛 SSM大学城学生社区互动管理平台 JavaWeb高校校园信息交流与服务系统
  • java底层的native和沙箱安全机制
  • 系统思考:多元胜过能力
  • 鸿蒙 Secure Boot 全流程解析:从 BootROM 到内核签名验证的实战指南
  • 2025 年值得尝试的 6 大内容管理系统 (CMS)
  • 【实用IP查询工具】IP数据云-IP地址查询离线库使用方案
  • 【操作系统】Linux 中的 exec 命令
  • RK3566/RK3568 Android11 CAN开发(内核配置+测试验证+安卓app开发)
  • STM32F103之存储/启动流程
  • HarmonyOS基础概念
  • 【TCP/IP】17. 移动 IP
  • Swift 解 LeetCode 324:一步步实现摆动排序 II,掌握数组重排的节奏感
  • 雷达遥感星座微波射频组件抗辐照MCU的选型与实践
  • 【JMeter】接口加密
  • 【JMeter】调试方法
  • 学弟让我帮忙写一个学生管理系统的后端,我直接上科技
  • [大模型问数]实现大模型调用MYSQL(03)【MCP笔记】
  • Webview 中可用的 VS Code 方法
  • Playwright Python 教程:网页自动化
  • 飞算JavaAI:新一代智能编码引擎,革新Java研发范式
  • Linux进程间通信--命名管道
  • 深度学习入门教程(三)- 线性代数教程
  • react打包发到线上报错Minified React error #130
  • 如何快速掌握WeNet:从零到一的端到端语音识别学习指南
  • spring-ai RAG(Retrieval-Augmented Generation)
  • 上位机知识篇---网络通信端口
  • 线程邮箱(线程间通信的异步缓存机制)