C#网络编程之TCP(五)

一、文件的上传

  如果我们不单单要传输文字,还希望把文件传输至服务器,那么应该怎么做呢?

  之前的章节中我们知道,tcp的数据传输在网络信道中是以字节的方式传输的,所以传输文件的时候,也是需要把文件转换成字节。

二、小文件的传输

  首先我们在指定目录下建立一个文件;如图所示,我们在临时目录 D:\TempFile 下建立了一个文件,并将其打包成zip格式的压缩文件。

  

 

  然后我们编写客户端与服务端代码,将文件传输给服务端,并保存下来。

  客户端代码:

using System.Net.Sockets;
using System.Net;
using System.Text;

const string ip = "127.0.0.1";
const int port = 10002;

// 建立服务器
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
EndPoint point = new IPEndPoint(IPAddress.Parse(ip), port);

socket.Connect(point);
Console.WriteLine("链接至服务器...");

// 文件路径
string path = @"D:/TempFile/HelloWorld.zip";

byte[] buffer = File.ReadAllBytes(path);

socket.Send(buffer);

Console.WriteLine("发送文件");

  服务端代码:

using System.Net.Sockets;
using System.Net;
using System.Text;
using System.Collections;

const string ip = "127.0.0.1";
const int port = 10002;

// 建立服务器
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
EndPoint point = new IPEndPoint(IPAddress.Parse(ip), port);
socket.Bind(point);
socket.Listen();

// 监听客户端发起连接
Socket conn = socket.Accept();
Console.WriteLine("有客户端连接...");

Thread.Sleep(1000);

byte[] bytes = new byte[1024];
int len = conn.Receive(bytes);

// 临时文件名
string fileSavePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "upload.zip";

using (FileStream fs = new FileStream(fileSavePath, FileMode.OpenOrCreate, FileAccess.Write))
{
    fs.Write(bytes, 0, len);
}

Console.WriteLine($"接受文件并保存在{fileSavePath}目录下");

// 关闭连接
conn.Close();

  运行后,我们来查看结果。

  

 

   从结果中可以得知,文件被正确地传输了过来,并保存在了服务端的目录下。

  

 

posted @ 2022-10-28 11:18  Zeng。  阅读(328)  评论(0编辑  收藏  举报