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

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.dtcms.com/a/275052.html

相关文章:

  • SHA-256算法流程分析与演示——github工程完善
  • 网络安全基础作业
  • 连锁门店如何统一固定资产盘点?总部+门店协同攻略
  • 佳能(Canon)摄像机存储卡提示格式化的恢复方法
  • 七月份了,考研数学该怎么复习?
  • AD736ARZ-R7精密真有效值转换器 高精度测量的首选方案
  • Telegraf vs. Logstash:实时数据处理架构中的关键组件对比
  • 网络编程(基本概念)
  • Maven下载与配置对Java项目的理解
  • TensorFlow2 study notes[1]
  • 9.卷积神经网络操作
  • 【网络编程】KCP——可靠的 UDP 传输协议——的知识汇总
  • 公链的主要特征有哪些?
  • 【Docker#1】技术架构演进之路
  • Script Error产生的原因及解法
  • 新品上架后,亚马逊卖家如何高效投放广告
  • 自信的本质:在克服逆境的过程中爱上自己
  • 四、神经网络——正则化方法
  • Operation Blackout 2025 Phantom Check hayabusa+ControlSet001+VirtualBox
  • 【笔记】训练步骤代码解析
  • docker安装Consul笔记
  • Java(7.11 设计模式学习)
  • PLC框架-1.3- 汇川PN伺服(3号报文)
  • 多种人脸处理方案——人脸裁剪
  • Webview 中可用的 VS Code 方法
  • G1 垃圾回收算法详解
  • 【TCP/IP】16. 简单网络管理协议
  • 天晟科技携手万表平台,共同推动RWA项目发展
  • 从「小公司人事」到「HRBP」:选对工具,比转岗更能解决成长焦虑
  • Java大厂面试故事:谢飞机的互联网音视频场景技术面试全纪录(Spring Boot、MyBatis、Kafka、Redis、AI等)