使用c#窗体应用程序利用 TcpClient 类和 TcpListener 类创建一个同步TCP服务器,监听一个端口并接收来自客户端的消息。 客户端可以连接到服务器,发送消息并接收服务器的响应。
时间: 2024-12-15 19:25:21 浏览: 14
在 C# 中,使用 `TcpListener` 和 `TcpClient` 类可以帮助我们创建一个简单的同步 TCP 服务器。以下是基本步骤:
1. **创建TcpListener实例**:
首先,我们需要实例化一个 `TcpListener` 对象,并指定我们希望监听的端口号。例如:
```csharp
TcpListener listener = new TcpListener(IPAddress.Any, YOUR_PORT_NUMBER);
```
将 `YOUR_PORT_NUMBER` 替换为你想要监听的实际端口。
2. **开始监听**:
调用 `Start()` 方法启动监听器:
```csharp
listener.Start();
```
3. **接受客户端连接**:
创建一个循环,等待新的客户端连接请求:
```csharp
while (true)
{
TcpClient client = await listener.AcceptTcpClientAsync();
// 当有新连接时处理它
}
```
4. **处理客户端通信**:
对于每个新连接的客户端,创建一个新的线程或者异步任务来处理它的请求,例如读取数据和发送响应:
```csharp
private async void HandleClient(TcpClient client)
{
NetworkStream stream = client.GetStream();
StreamReader reader = new StreamReader(stream);
StreamWriter writer = new StreamWriter(stream);
string message = await reader.ReadLineAsync();
Console.WriteLine($"Received message from client: {message}");
// 发送响应
string response = "Server received your message!";
writer.WriteLine(response);
await writer.FlushAsync();
// 关闭连接
client.Close();
}
```
5. **关闭监听器**:
当所有的客户端连接都被处理完或者需要停止服务时,记得关闭监听器:
```csharp
// 在适当的时候关闭监听器
listener.Stop();
```
客户端连接、发送消息和接收响应的基本流程就是这样。你可以通过上述代码结构进行修改,添加错误处理和更多的功能。下面是完整的示例代码片段:
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading.Tasks;
public class ServerForm : Form
{
private TcpListener _listener;
public ServerForm()
{
InitializeComponent();
}
private async Task StartServer()
{
// ... (配置端口) ...
_listener = new TcpListener(IPAddress.Any, PORT_NUMBER);
_listener.Start();
while (true)
{
try
{
var client = await _listener.AcceptTcpClientAsync();
ThreadPool.QueueUserWorkItem(HandleClient, client);
}
catch (Exception ex)
{
Console.WriteLine($"Error occurred: {ex.Message}");
}
}
}
private static void HandleClient(object state)
{
TcpClient client = (TcpClient)state;
// ... (处理客户端通信) ...
}
private void btnConnect_Click(object sender, EventArgs e)
{
// 客户端连接部分...
}
private void btnListen_Click(object sender, EventArgs e)
{
if (_listener != null)
{
_listener.Stop();
}
else
{
StartServer();
}
}
}
```
阅读全文