TCP/IP 通讯 - 服务端

服务端实现(监听、接收、发送)
客户端实现(连接、发送、接收)

TCP/IP 是什么?
TCP = 传输控制协议IP = 网络协议
简单理解:・可靠:数据不会丢,不会乱序・面向连接:必须先 “建立连接” 才能通讯・双向通讯:客户端 ↔ 服务端 都能发消息

通讯流程:
服务端 开启监听(等待别人连我)
客户端 发起连接
连接成功 → 双方可以互相发消息
任意一方断开 → 连接关闭

一直停在这里,死等客户端来连接。
没有客户端连接 → 程序卡住不动
一旦有客户端连接 → 这一行才继续往下走
连接成功后,返回一个 client 对象(代表这条连接)

NetworkStream = 客户端和服务端之间的 “数据通道 / 数据线 / 水管”你必须拿到这个通道,才能发消息、收消息。

发消息 → 必须用 stream.Write()
收消息 → 必须用 stream.Read()
你没有 stream,就没有地方调用这两个方法。

网络传输的是字节,不是文字。NetworkStream 帮你:
管理连接
管理数据发送
管理数据接收
处理底层复杂网络细节
你只需要简单读写,不用管底层网络怎么实现。

using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

// TCP 服务端
class TcpServer
{
static void Main(string[] args)
{
// 1. 设置 IP 和端口
IPAddress ip = IPAddress.Parse("127.0.0.1"); // 本地测试
int port = 8888;

// 2. 创建监听对象
TcpListener server = new TcpListener(ip, port);
server.Start(); // 启动监听
Console.WriteLine("服务端已启动,等待客户端连接...");

// 3. 阻塞等待客户端连接
TcpClient client = server.AcceptTcpClient();
Console.WriteLine("客户端已连接!");

// 4. 获取网络流
NetworkStream stream = client.GetStream();

// 5. 循环接收消息
byte[] buffer = new byte[1024];
while (true)
{
try
{
// 读取数据
int len = stream.Read(buffer, 0, buffer.Length);
string msg = Encoding.UTF8.GetString(buffer, 0, len);
Console.WriteLine("收到客户端:" + msg);

// 回复客户端
string sendMsg = "服务端已收到:" + msg;
byte[] sendBytes = Encoding.UTF8.GetBytes(sendMsg);
stream.Write(sendBytes, 0, sendBytes.Length);
}
catch
{
Console.WriteLine("客户端断开连接");
break;
}
}

// 关闭
stream.Close();
client.Close();
server.Stop();
}
}

————————————————————————————————————————————————————————————————————

using System;
using System.Net.Sockets;
using System.Text;

// TCP 客户端
class TcpClientApp
{
static void Main(string[] args)
{
// 1. 创建客户端
TcpClient client = new TcpClient();

// 2. 连接服务端
client.Connect("127.0.0.1", 8888);
Console.WriteLine("成功连接服务端!");
NetworkStream stream = client.GetStream();

// 3. 循环发送消息
while (true)
{
Console.Write("请输入消息:");
string msg = Console.ReadLine();

// 发送
byte[] bytes = Encoding.UTF8.GetBytes(msg);
stream.Write(bytes, 0, bytes.Length);

// 接收服务端回复
byte[] buffer = new byte[1024];
int len = stream.Read(buffer, 0, buffer.Length);
string res = Encoding.UTF8.GetString(buffer, 0, len);
Console.WriteLine("收到服务端:" + res);
}
}
}

posted @ 2026-04-07 17:11  菜鸟的奋斗军  阅读(18)  评论(0)    收藏  举报