使用C#写两个程序,实现SOCKET TCP通讯,服务器能够和多个客户端进行连接,且能够向每个客户端单独发送消息
时间: 2024-02-28 19:54:54 浏览: 88
好的,我可以为您解答这个问题。
首先,我们需要引用 `System.Net` 和 `System.Net.Sockets` 命名空间,以便使用 TCP/IP 相关的类。
以下是服务器端代码示例:
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Server {
static void Main(string[] args) {
// 监听端口
int port = 8888;
// 创建 TCP/IP Socket
TcpListener listener = new TcpListener(IPAddress.Any, port);
// 开始监听
listener.Start();
Console.WriteLine("Server started.");
while (true) {
// 接收客户端连接
TcpClient client = listener.AcceptTcpClient();
Console.WriteLine("Client connected.");
// 处理客户端连接的线程
System.Threading.Thread thread = new System.Threading.Thread(() => {
// 获取客户端网络流
NetworkStream stream = client.GetStream();
while (true) {
// 读取客户端发送的消息
byte[] data = new byte[1024];
int length = stream.Read(data, 0, data.Length);
string message = Encoding.UTF8.GetString(data, 0, length);
Console.WriteLine("Received: " + message);
// 向客户端发送消息
byte[] response = Encoding.UTF8.GetBytes("Hello, client!");
stream.Write(response, 0, response.Length);
}
});
// 启动线程处理客户端连接
thread.Start();
}
}
}
```
以上代码实现了一个简单的 TCP 服务器,监听指定端口并接受客户端连接。每当有客户端连接时,会创建一个新的线程来处理该客户端连接。在处理连接的线程中,会不断读取客户端发送的消息,并向客户端发送固定的欢迎消息。
以下是客户端代码示例:
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
class Client {
static void Main(string[] args) {
// 连接服务器
int port = 8888;
TcpClient client = new TcpClient();
client.Connect(IPAddress.Loopback, port);
Console.WriteLine("Connected to server.");
// 获取网络流
NetworkStream stream = client.GetStream();
while (true) {
// 发送消息
Console.Write("Message to send: ");
string message = Console.ReadLine();
byte[] data = Encoding.UTF8.GetBytes(message);
stream.Write(data, 0, data.Length);
// 读取服务器回复
data = new byte[1024];
int length = stream.Read(data, 0, data.Length);
message = Encoding.UTF8.GetString(data, 0, length);
Console.WriteLine("Received: " + message);
}
}
}
```
以上代码实现了一个简单的 TCP 客户端,连接指定的服务器并不断发送消息并读取服务器回复。
需要注意的是,以上代码仅实现了单个客户端连接。如果需要支持多个客户端连接,可以将每个客户端连接都单独创建一个处理连接的线程来实现。同时,在发送消息时需要使用每个客户端的网络流来发送消息,以保证消息不会被发送到错误的客户端。
阅读全文