核心特点
-
服务端:
- 单线程监听,逐个处理客户端连接
- 简单的收发数据逻辑
- 自动处理客户端断开
-
客户端:
- 自动重连机制(失败后 3 秒重试)
- 基本的消息发送和接收
- 输入 "exit" 退出
使用方法
- 先运行服务端
- 再运行客户端
- 客户端输入消息发送,服务端会回复
- 客户端断开后会自动重连
这是最简化的实现,保留了 TCP 通信的核心功能,适合学习和测试使用。
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class SimpleTcpServer
{
static void Main()
{
TcpListener server = new TcpListener(IPAddress.Any, 8888);
server.Start();
Console.WriteLine("服务端启动,监听端口8888...");
while (true)
{
// 接受客户端连接
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("客户端已连接");
// 处理客户端通信
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
while (true)
{
try
{
// 读取客户端数据
int bytesRead = stream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0) break;
string data = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("收到:" + data);
// 响应客户端
byte[] response = Encoding.UTF8.GetBytes("已收到:" + data);
stream.Write(response, 0, response.Length);
}
catch
{
break;
}
}
client.Close();
Console.WriteLine("客户端断开连接");
}
}
}
using System;
using System.Net.Sockets;
using System.Text;
using System.Threading;
class SimpleTcpClient
{
static void Main()
{
while (true)
{
try
{
TcpClient client = new TcpClient();
Console.WriteLine("尝试连接服务器...");
client.Connect("127.0.0.1", 8888);
Console.WriteLine("连接成功!");
NetworkStream stream = client.GetStream();
// 发送数据
while (true)
{
Console.Write("输入消息:");
string message = Console.ReadLine();
if (message == "exit") break;
byte[] data = Encoding.UTF8.GetBytes(message);
stream.Write(data, 0, data.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);
}
client.Close();
break;
}
catch (Exception ex)
{
Console.WriteLine("连接失败:" + ex.Message);
Thread.Sleep(3000); // 3秒后重试
}
}
}
}