双链路socket c#
时间: 2023-08-02 14:35:47 浏览: 173
c# socket 双向通信
5星 · 资源好评率100%
下面是使用 C# 实现双链路 Socket 的示例代码,其中客户端和服务器之间建立了两条 TCP 连接,分别用于客户端向服务器发送数据和服务器向客户端发送数据:
服务器端代码:
```csharp
using System;
using System.Net;
using System.Net.Sockets;
class Server
{
static void Main(string[] args)
{
// 创建监听的 Socket
Socket listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
listener.Bind(new IPEndPoint(IPAddress.Any, 8080)); // 绑定监听端口
listener.Listen(100); // 开始监听,最大连接数为 100
// 等待客户端连接
Console.WriteLine("Waiting for client...");
Socket client1 = listener.Accept(); // 接受第一个客户端连接
Console.WriteLine("Client 1 connected.");
Socket client2 = listener.Accept(); // 接受第二个客户端连接
Console.WriteLine("Client 2 connected.");
// 创建用于接收和发送数据的缓冲区
byte[] buffer1 = new byte[1024];
byte[] buffer2 = new byte[1024];
// 循环处理客户端的请求
while (true)
{
// 接收第一个客户端的数据
int recvLen1 = client1.Receive(buffer1);
if (recvLen1 == 0) // 客户端已经关闭连接
{
Console.WriteLine("Client 1 disconnected.");
client1.Close();
client2.Close();
break;
}
Console.WriteLine("Received message from client 1: " + Encoding.UTF8.GetString(buffer1, 0, recvLen1));
// 将第一个客户端的数据发送给第二个客户端
client2.Send(buffer1, 0, recvLen1, SocketFlags.None);
// 接收第二个客户端的数据
int recvLen2 = client2.Receive(buffer2);
if (recvLen2 == 0) // 客户端已经关闭连接
{
Console.WriteLine("Client 2 disconnected.");
client1.Close();
client2.Close();
break;
}
Console.WriteLine("Received message from client 2: " + Encoding.UTF8.GetString(buffer2, 0, recvLen2));
// 将第二个客户端的数据发送给第一个客户端
client1.Send(buffer2, 0, recvLen2, SocketFlags.None);
}
// 关闭监听的 Socket
listener.Close();
}
}
```
客户端代码:
```csharp
using System;
using System.Net;
using System.Net.Sockets;
class Client
{
static void Main(string[] args)
{
// 连接服务器
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
socket.Connect(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 8080));
// 创建用于接收和发送数据的缓冲区
byte[] buffer = new byte[1024];
// 循环处理用户输入
while (true)
{
// 读取用户输入
Console.Write("Input message: ");
string input = Console.ReadLine();
// 发送数据给服务器
byte[] data = Encoding.UTF8.GetBytes(input);
socket.Send(data, 0, data.Length, SocketFlags.None);
// 接收服务器的响应
int recvLen = socket.Receive(buffer);
if (recvLen == 0) // 服务器已经关闭连接
{
Console.WriteLine("Server disconnected.");
break;
}
Console.WriteLine("Received message from server: " + Encoding.UTF8.GetString(buffer, 0, recvLen));
}
// 关闭连接
socket.Close();
}
}
```
这段代码中,我们使用 `Socket` 类创建了一个监听 Socket,并在服务器端等待客户端连接。当两个客户端分别连接到服务器端时,服务器端将使用两个缓冲区分别处理客户端发送的数据,并将接收到的数据转发给另一个客户端。在客户端中,我们使用 `Socket` 类连接到服务器,并循环读取用户输入并发送给服务器。同时,客户端也会接收服务器发送的数据并将其输出到控制台。
阅读全文