C# socket 服务端与客户端
时间: 2024-12-22 12:26:09 浏览: 8
在C#中,Socket(套接字)提供了一种通信机制,使得应用程序能够在本地计算机或网络上与其他程序进行双向通信。服务器端和客户端的概念通常用于描述这种通信模式中的两个不同角色。
**服务器端**:
- **创建监听socket**: 使用`System.Net.Sockets.Socket` 类创建一个服务器端socket,设置其类型为`IPType`(IPv4或IPv6)和`SocketType`(TCP或UDP),然后进入监听状态。
- **绑定端口**: 使用`Bind` 方法指定服务器要监听的端口号。
- **接受连接**: 通过调用`Accept` 方法等待并接受来自客户端的连接请求,返回一个新的socket表示已建立的连接。
- **处理连接**: 对每个连接,执行相应的业务逻辑,可能包括读取、写入数据,直到连接关闭。
```csharp
using System.Net;
using System.Net.Sockets;
// 创建服务器端socket
TcpListener listener = new TcpListener(IPAddress.Any, 8080);
listener.Start();
while (true)
{
// 接受连接
Socket client = listener.AcceptSocket();
Console.WriteLine("Accepted connection from: " + client.RemoteEndPoint.ToString());
// 处理客户端请求
using (NetworkStream stream = client.GetStream())
{
byte[] buffer = new byte[1024];
int bytesRead = stream.Read(buffer, 0, buffer.Length);
// 解析收到的数据
string data = Encoding.ASCII.GetString(buffer, 0, bytesRead);
Console.WriteLine($"Received: {data}");
// 发送响应
string response = "Hello, Client!";
stream.Write(Encoding.ASCII.GetBytes(response), 0, response.Length);
// 关闭连接
client.Close();
}
}
```
**客户端**:
- **创建连接**: 使用`TcpClient` 类创建一个新的socket,指定服务器的地址和端口号,然后连接到服务器。
- **发送数据**: 打开连接后,使用`GetStream()` 获取网络流,然后发送数据。
- **接收数据**: 从网络流中读取数据。
- **关闭连接**: 当完成交互后,调用`Close` 方法关闭连接。
```csharp
using System.Net.Sockets;
TcpClient client = new TcpClient();
client.Connect("localhost", 8080);
NetworkStream stream = client.GetStream();
byte[] request = Encoding.ASCII.GetBytes("Hello Server!");
stream.Write(request, 0, request.Length);
string response = Encoding.ASCII.GetString(stream.ReadBytes(request.Length));
Console.WriteLine($"Response received: {response}");
client.Close();
```
阅读全文