日期:2014-05-18  浏览次数:20978 次

C#开发网络编程-应用层协议的选择问题?
一直有个疑问想不通,请教下:
  实现网络文件传输(上传或者下载),已知FTP可以完成,但是FTP是基于TCP实现的,想找一个基于UDP开发的方法实现文件传输,不知如何实现?或者不用应用层协议,仅基于UDP实现传输,但又不知道文件如何拆分(便于传输)? 

  谢谢了

------解决方案--------------------
我只做过UDP的数据传输小练习 贴出来分享一下 

------解决方案--------------------
UDP无连接,不可靠,用来传文件不大靠谱吧
------解决方案--------------------
UDP包不一定能发送接收成功,不可靠,如果要udp来实现文件传输,你必须写程序来判断哪个部分传输没有成功,然后重新传输,会比TCP的实现复杂得多,不是一个简单的程序,
------解决方案--------------------
如果要用UDP(比如NAT穿透的情况下),就要定义好传输协议,并实现重传机制。

比如,你可以定义这么一个包头(总共16个字节):
C# code

public partial class FileTransferHeader
{
    public short MagicNumber = 0x5446;    // 'FT' 特殊标记
    public PacketType PacketType;         // 类型
    public uint RequestId;                // 会话编号 (每个下载分配一个独特编号)
    public uint PacketId;                 // 数据包编号
    public uint Length;                   // 数据长度
}

public enum PacketType : short
{
    Error       = 0,
    ReqDownload = 1,
    AckDownload = 2,

    ReqPackets  = 3,
    AckPackets  = 4,

    Data        = 5,
    Text        = 6,
}

------解决方案--------------------
探讨

如果要用UDP(比如NAT穿透的情况下),就要定义好传输协议,并实现重传机制。

比如,你可以定义这么一个包头(总共16个字节):
C# code

public partial class FileTransferHeader
{
public short MagicNumber = 0x5446; // 'FT' 特殊标记
public PacketType P……

------解决方案--------------------
探讨
……
NAT 没穿透怎么办?

------解决方案--------------------
HttpRequest不好吗?