资源简介
Xmodem 协议传输由接收程序和发送程序完成。先由接收程序发送协商字符,协商校验方式,协商通过之后发送程序就开始发送数据包,接收程序接收到完整的一个数据包之后, 按照协商的方式对数据包进行校验。校验通过之后发送确认字符,然后发送程序继续发送下一包;如果校验失败,则发送否认字符,发送程序重传此数据包。
Xmodem协议是由Ward Chritensen于70年代提出并实现的,传输数据单位为信息包。
Xmodem 协议一般支持128 字节的数据包,并且支持校验和、CRC 两种校验方式。
参考:
https://blog.csdn.net/qq61394323/article/details/77324156
https://blog.csdn.net/m0_37756916/article/details/76064727
代码片段和文件信息
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace RUDPSLib.XModem1
{
//Version 1.3
//This class is tested to be 100% compatibel to Microsoft(r) Hyperterminal 5.1
//XmodemTransmit: supports both CRC and checksum
//XModemReceive: only supports checksum
//Feel free to use/modify/copy/distribute this file
public class XModem
{
#region Events
private System.EventHandler PacketReceivedEvent;
public event System.EventHandler PacketReceived
{
add
{
PacketReceivedEvent = (System.EventHandler)System.Delegate.Combine(PacketReceivedEvent value);
}
remove
{
PacketReceivedEvent = (System.EventHandler)System.Delegate.Remove(PacketReceivedEvent value);
}
}
public delegate void PacketSentEventHandler(int TXStringSize);
private PacketSentEventHandler PacketSentEvent;
public event PacketSentEventHandler PacketSent
{
add
{
PacketSentEvent = (PacketSentEventHandler)System.Delegate.Combine(PacketSentEvent value);
}
remove
{
PacketSentEvent = (PacketSentEventHandler)System.Delegate.Remove(PacketSentEvent value);
}
}
#endregion
#region Members
private System.IO.Ports.SerialPort port = null;
private byte SOH = (byte)(0x01);
//header for 128byte-packets
private byte STX = (byte)(0x02);
//header for 1024byte-packets
private byte EOT = (byte)(0x04);
//end of transmission
private byte ACK = (byte)(0x06);
//acknowledge
private byte NAK = (byte)(0x15);
//negativ acknowledge
private byte CAN = (byte)(0x18);
///
/// cancel transfer
///
private byte CTRLZ = (byte)(0x1A);
//padding char to fill data blocks < buffer size
private byte C_pad = (byte)(0x43);
//start of a CRC request
private ushort MAXRETRANS = System.Convert.ToUInt16(25);
//1024 for XModem 1k + 3 head chars + 2 crc + nul
private byte[] xbuff = new byte[1029];
private int bufsz;
private int crc = 1;
private byte packetno = (byte)1;
private int i;
private int c;
private int len = 0;
private int retry;
#endregion
#region Constructor
public XModem(System.IO.Ports.SerialPort port)
{
if (!port.IsOpen)
port.Open();
this.port = port;
}
#endregion
#region Implementation
#region XModemReceive
//
//receive byte Array via XModem using either
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 16017 2018-07-05 14:27 XModem.cs
相关资源
- C# 软件版本更新
- C#屏幕软键盘源码,可以自己定制界面
- 智慧城市 智能家居 C# 源代码
- c#获取mobile手机的IMEI和IMSI
- C#实现简单QQ聊天程序
- 操作系统 模拟的 欢迎下载 C#版
- C#写的计算机性能监控程序
- 用C#实现邮件发送,有点类似于outlo
- MVC model层代码生成器 C#
- c#小型图书销售系统
- C# Socket Server Client 通讯应用 完整的服
- c# winform 自动登录 百度账户 源代码
- C#编写的16进制计算器
- C#TCP通信协议
- C# 数据表(Dataset)操作 合并 查询一
- C#语音识别系统speechsdk51,SpeechSDK51L
- 数据库备份还原工具1.0 C# 源码
-
[免费]xm
lDocument 节点遍历C# - EQ2008LEDc#开发实例
- DirectX.Capturec# winform 操作摄像头录像附
- c# 实现的最大最小距离方法对鸢尾花
- C#版保龄球记分代码
- C#自定义控件
- 基于c#的实验室设备管理系统621530
- C# 使用ListView控件实现图片浏览器(源
- C#简单窗体聊天程序
- C#指纹识别系统程序 报告
- c# 高校档案信息管理系统
- c#向word文件插入图片
- C#左侧导航菜单(动态生成)
评论
共有 条评论