C# TCP服务器端,传出图片文件及图片名字到客户端指定地址
时间: 2024-09-29 17:01:18 浏览: 13
在C#中,通过TCP建立服务器,发送图片文件和文件名给客户端需要使用Socket编程。首先,你需要将图片数据转换为`MemoryStream`,然后逐字节发送。以下是基本步骤:
1. **服务器端**:
```csharp
using System.Net.Sockets;
using System.IO;
TcpListener listener = new TcpListener(IPAddress.Any, 8000); // 设置监听端口
listener.Start();
while (true)
{
TcpClient client = listener.AcceptTcpClient();
string imageName = "your_image.jpg"; // 图片名称
byte[] imageBytes = ConvertImageToByteArray(imageName); // 转换图片为字节数组
NetworkStream stream = client.GetStream();
stream.Write(BitConverter.GetBytes(imageName.Length), 0, sizeof(int));
stream.Write(Encoding.UTF8.GetBytes(imageName), 0, imageName.Length);
// 发送图片数据
stream.Write(imageBytes, 0, imageBytes.Length);
client.Close(); // 关闭连接
}
// 某些库如System.Drawing可以用于转换图片为字节数组
private static byte[] ConvertImageToByteArray(string imageName)
{
Bitmap bitmap = new Bitmap(imageName);
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, ImageFormat.Jpeg); // 可以根据需求选择其他格式
return ms.ToArray();
}
```
2. **客户端接收并处理**:
客户端需要监听接收到的数据,并读取文件名和图像数据。
```csharp
// 假设你有一个TcpClient连接到了服务器
byte[] buffer = new byte[1024];
int length;
while ((length = stream.Read(buffer, 0, buffer.Length)) > 0)
{
string imageName = Encoding.UTF8.GetString(buffer, 0, length).TrimEnd('\0');
int fileNameLength = BitConverter.ToInt32(buffer, length);
buffer = new byte[fileNameLength];
length = stream.Read(buffer, 0, fileNameLength);
string fileName = Encoding.UTF8.GetString(buffer, 0, fileNameLength);
byte[] imageData = new byte[length];
stream.Read(imageData, 0, length);
// 在客户端处理接收到的文件和图片
SaveImageToDisk(fileName, imageData);
}
```