cs
复制代码
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class TcpServer
{
static void Main()
{
// 1. 创建 TCP 流式套接字(与你提供的代码一致)
Socket serverSocket = new Socket(SocketType.Stream, ProtocolType.Tcp);
try
{
// 2. 绑定本地端点(IP 地址设为 0.0.0.0 表示监听所有网络接口,端口设为 8888)
IPEndPoint localEndPoint = new IPEndPoint(IPAddress.Any, 8888);
serverSocket.Bind(localEndPoint);
// 3. 开始监听(参数为最大挂起连接数)
serverSocket.Listen(10);
Console.WriteLine("服务器已启动,正在监听端口 8888...");
// 4. 循环接受客户端连接(阻塞式)
while (true)
{
// 接受客户端连接,返回一个新的 Socket 用于与该客户端通信
Socket clientSocket = serverSocket.Accept();
Console.WriteLine($"新客户端连接:{clientSocket.RemoteEndPoint}");
// 示例:向客户端发送欢迎消息
byte[] welcomeMsg = Encoding.UTF8.GetBytes("欢迎连接到服务器!");
clientSocket.Send(welcomeMsg);
// 此处可添加处理客户端消息的逻辑(通常建议用多线程/异步处理)
// 简单示例:关闭客户端连接(实际应用中需根据需求处理)
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
}
}
catch (Exception ex)
{
Console.WriteLine($"发生错误:{ex.Message}");
}
finally
{
// 关闭服务器套接字
serverSocket.Close();
}
}
}
关键步骤说明:
- 创建套接字 :
new Socket(SocketType.Stream, ProtocolType.Tcp)
正确创建了 TCP 套接字。
- 绑定端点 :
Bind
方法将套接字与本地 IP 和端口关联(IPAddress.Any
表示监听所有可用网络接口)。
- 开始监听 :
Listen(10)
启动监听,参数 10
表示最大允许的挂起连接队列长度。
- 接受连接 :
Accept()
是阻塞方法,会等待客户端连接,返回的 clientSocket
用于与该客户端单独通信。
注意事项:
- 实际应用中,建议使用 异步方法 (如
AcceptAsync
)或多线程处理客户端连接,避免主线程阻塞。
- 端口号(示例中为 8888)需确保未被占用,且防火墙允许该端口的入站连接。
- 通信完成后需关闭
clientSocket
和 serverSocket
以释放资源。