如何在C#中使用Socket实现文件的传输?
时间: 2024-11-25 20:16:35 浏览: 4
C# socket TCP 大文件传输同时实现断点续传
5星 · 资源好评率100%
在C#中,可以使用Socket类及其相关的类库来实现文件传输。这里是一个简化的步骤:
1. 引入必要的命名空间:
```csharp
using System;
using System.Net;
using System.IO;
```
2. 创建Socket实例,并指定协议(通常为TCP):
```csharp
TcpClient client = new TcpClient();
IPEndPoint ipEndPoint = new IPEndPoint(IPAddress.Parse("IP_ADDRESS"), PORT);
client.Connect(ipEndPoint);
```
替换`"IP_ADDRESS"`为服务器地址,`PORT`为服务器监听的端口号。
3. 打开网络流(Stream)用于读写操作:
```csharp
NetworkStream networkStream = client.GetStream();
```
4. 发送文件:创建MemoryStream,读取文件内容并分块发送(例如每1KB一块):
```csharp
FileStream fileStream = File.OpenRead(FILE_PATH);
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
networkStream.Write(buffer, 0, bytesRead);
}
fileStream.Close(); // 关闭源文件流
// 发送结束标志(比如字符串"EOF")
networkStream.WriteByte(0);
```
替换`FILE_PATH`为要传输的文件路径。
5. 接收文件:在接收方,同样打开网络流,然后读取数据到内存缓冲区,直到遇到"EOF"标志:
```csharp
byte[] receiveBuffer = new byte[1024];
int receivedBytes;
while ((receivedBytes = networkStream.ReadByte()) != -1)
{
Array.Resize(ref receiveBuffer, receiveBuffer.Length + 1); // 增加容量以容纳新字节
receiveBuffer[receiveBytes] = (byte)networkStream.ReadByte(); // 可能需要两次读取来得到完整的字节
}
File.WriteAllBytes(RECEIVE_FILE_PATH, receiveBuffer); // 将接收到的数据保存到本地文件
client.Close(); // 关闭连接
```
替换`RECEIVE_FILE_PATH`为期望保存文件的本地路径。
6. 错误处理:确保在整个过程中添加适当的异常处理,比如在网络连接中断或数据传输错误时关闭资源。
阅读全文