用c#多线程,写个服务器接收数据的方法
时间: 2023-12-21 09:07:20 浏览: 31
以下是一个简单的 C# 多线程服务器接收数据的示例:
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
class Server {
static void Main(string[] args) {
StartServer();
}
static void StartServer() {
try {
// 创建一个 TCP/IP socket 并绑定到本地端口
TcpListener listener = new TcpListener(IPAddress.Any, 1234);
listener.Start();
Console.WriteLine("服务器已启动,等待连接...");
while (true) {
// 接受客户端连接请求并创建一个新的线程处理该连接
TcpClient client = listener.AcceptTcpClient();
Thread thread = new Thread(new ParameterizedThreadStart(HandleClient));
thread.Start(client);
}
}
catch (Exception e) {
Console.WriteLine("Error: " + e.Message);
}
}
static void HandleClient(object obj) {
TcpClient client = (TcpClient)obj;
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
int bytesRead;
while (true) {
// 读取客户端发送的数据
bytesRead = stream.Read(buffer, 0, buffer.Length);
if (bytesRead == 0) break;
// 将收到的数据转换为字符串并输出到控制台
string data = System.Text.Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine("收到来自客户端的数据: {0}", data);
// 回传数据给客户端
byte[] message = System.Text.Encoding.ASCII.GetBytes("服务器已收到您的消息");
stream.Write(message, 0, message.Length);
}
// 关闭连接
client.Close();
}
}
```
该示例中,我们创建了一个 TCP/IP socket 并绑定到本地端口 1234,然后使用 `TcpListener.AcceptTcpClient()` 方法接受客户端连接请求,并为每个连接创建一个新的线程处理数据。在处理数据的线程中,我们使用 `NetworkStream.Read()` 方法读取客户端发送的数据,将其转换为字符串并输出到控制台,然后使用 `NetworkStream.Write()` 方法回传数据给客户端。当客户端断开连接时,我们关闭连接并退出处理数据的线程。