c#实现使用Tcp/Ip下载文件的代码
使用tcp/ip传送文件。简单设计思路是在服务器端启动TcpListener监听客户端的Socket连接。
当Client发送连接请求,TcpListener捕获当前请求的Socket,并获取收到的数据(字符串,称为命令)。
然后由命令处理程序分析字符串,如果字符串头部包含GET_FILE则为下载文件请求。
例:如客户机向服务器程序发送请求:"GET_FILE|D:PUBLISHTEST.DLL"。首先TcpListener捕获
当前请求的Socket,收到字符串,如果是下载文件请求就通过socket.SendFile(file="D:PUBLISH
TEST.DLL")将文件传送给当前Socket。在客户端由NetworkStream.Read()方法接收来自服务器发送的文件。
同理,如果实现网上象棋对战游戏,通过Socket.Send(命令)->分析->执行->移动棋子,不就实现了吗?
Socket应用往往不止这些,学会Socket组件是网络编程基础。
服务器界面运行图。
客户机界面截图:
输入要下载的文件名及保存目录。
思考:
1.如果提供一个下载文件清单,是不是可以批量下载文件?
2.如果服务器上的文件与本机的文件最后修改日期相比较,是不是可以改装为版本升级程序?
3.如果客户端向服务器上传文件,是不是可以改装成mini版的ftp程序?
4.如果收到的byte[]是某对象的序列化数据,而后将byte[]还原成对象,是不是实现tcp/ip传送对象?
5.如果对象是一个电脑向另一个电脑传送的某个命令,是不是可以实现网上对战游戏?
6.你思想有多远socket就能走多远。
部分原代码:
UpgraderClient.cs
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Net;
using System.IO;
namespace VJSDN.Tech.TcpIpDownloader
{
/// <summary>
/// Tcp/ip下载器客户端
/// </summary>
public class UpgraderClient
{
private OutputInvoke _writeOutput = null;
public UpgraderClient(OutputInvoke writeOutput)
{
_writeOutput = writeOutput;
}
/// <summary>
/// 下载文件
/// </summary>
public bool DownloadFile(string file, string savePath)
{
string hostIp = "8.8.8.2"; //主机ip
int hostPort = 12346; //主机端口
try
{
TcpClient client = new TcpClient();
client.ReceiveTimeout = 1000 * 60;
if (client == null || file.Trim() == "") return false;
TryConnect(client, hostIp, hostPort); //连接服务器
if (!client.Connected) return false;//连线线失败,退出
byte[] bs = Encoding.Unicode.GetBytes("GET_FILE|" + file);
client.Client.Send(bs); //发送请求
//开始接受数据....
NetworkStream ns = client.GetStream();
MemoryStream ms = new System.IO.MemoryStream();
byte[] resBytes = new byte[256];
int resSize;
do
{
resSize = ns.Read(resBytes, 0, resBytes.Length);
string msg = Byte2Str(resBytes);
if (msg.Trim().ToUpper() == "FILE_NOT_FOUND")
{
if (_writeOutput != null) _writeOutput("找不到文件:" + file);
&n
补充:软件开发 , C# ,
上一个:C#语言学习之关键字
下一个:C#实现HTTP协议:多线程文件传输