C#实现客户端与客户端文件与图片传输,请给出服务端与客户端的代码
时间: 2024-10-09 12:11:34 浏览: 73
在C#中,我们可以使用Socket编程来实现客户端与客户端之间的文件和图片传输。这里提供一个基本的服务端和服务端的简化示例:
**服务端(Server.cs):**
```csharp
using System;
using System.Net;
using System.Net.Sockets;
using System.IO;
class FileTransferServer
{
private TcpListener _listener;
public void Start(int port)
{
_listener = new TcpListener(IPAddress.Any, port);
_listener.Start();
Console.WriteLine($"Server started on port {port}...");
while (true)
{
using var client = _listener.AcceptTcpClient();
HandleClient(client);
}
}
private async void HandleClient(TcpClient client)
{
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[4096];
try
{
int length = await ReadData(stream, ref buffer);
if (length > 0)
{
string fileType = Encoding.UTF8.GetString(buffer, 0, length);
switch (fileType)
{
case "FILE":
ProcessFileTransmission(stream, client);
break;
case "IMAGE":
ProcessImageTransmission(stream, client);
break;
// 其他文件类型处理...
default:
Console.WriteLine($"Unknown file type: {fileType}");
break;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
// ... 实现文件和图像传输的具体方法 ...
}
// 调用启动服务器
public static void Main(string[] args)
{
FileTransferServer server = new FileTransferServer();
server.Start(12345); // 使用特定端口
}
```
**客户端(Client1.cs 或 Client2.cs):**
```csharp
using System;
using System.Net.Sockets;
using System.IO;
class FileTransferClient
{
private TcpClient _client;
private Stream _stream;
public async Task ConnectToServer(string ipAddress, int port, string fileType, byte[] fileBytes)
{
_client = new TcpClient(ipAddress, port);
_stream = _client.GetStream();
await SendFileType(fileType);
await SendFile(fileBytes);
// 关闭连接后可以释放资源
_client.Close();
}
private async Task SendFileType(string fileType)
{
byte[] buffer = Encoding.UTF8.GetBytes(fileType);
await _stream.WriteAsync(buffer, 0, buffer.Length);
}
private async Task SendFile(byte[] fileBytes)
{
await _stream.WriteAsync(fileBytes, 0, fileBytes.Length);
}
// ... 可能需要实现文件接收和保存到本地的方法 ...
}
// 调用客户端实例并开始连接...
public static async Task Main(string[] args)
{
await FileTransferClient client = new FileTransferClient();
await client.ConnectToServer("localhost", 12345, "FILE", GetFileContent()); // 将实际文件内容替换为GetFileContent()
}
```
这个例子展示了基础的文件和图片传输,你需要补充`ProcessFileTransmission`和`ProcessImageTransmission`方法,以及如何读取和发送文件内容。同时,注意这只是一个简化的示例,实际应用中可能需要添加错误处理、数据校验等。
**相关问题--:**
1. 如何确保数据的安全性?
2. 这个示例适用于大文件传输吗?如果不行,应如何优化?
3. 如何扩展这个代码支持更多类型的文件传输?
阅读全文