摘要:
在不同的DELHI版本中,INDY的版本是不同的,而且9和10不兼容,为了让代码简单,轻便,跨版本移值,决定udp使用时使用TUdpSocket控件来实现收发。结果却令人郁闷的发现,无法接收,因为TUdpSocket是为作Client设置的,没有进行Bind,于是,显式调用了Bind,依然不行,返回一个错误码。查看netstat ,显示的是一个随机的端口。 由于对WINSOCK底层不是很了解,看源码时没有发现什么问题。结果在CSDN上有人指出了问题所在,TUdpSocket在Open时会调用Connect,而Connect时会bind到一个随机的端口,所以再次bind时会失败。 原来如... 阅读全文
摘要:
UDT是用UDP实现,以可靠传输为目标的一套开源库,其源码可以在SF上找到,直到现在不久,才发现是它是国人的一个开源软件,向研究此协议的谷博士致敬,在当前的浮燥环境,尤其可敬。 网上有SDK作者本人写的一个DELPHI的UDT.pas的头文件,本来想用它来封装一个类似TTcpServer和TTcpClient的组件,但半途中发现udt的select函数的参数是C++中的Vector类型,这在Delphi中没有,而UDT.pas中也没有相关的定义。于是自己动手,丰衣足食,自己下载下来代码,手动重新导出已有的函数,新加并导出必要的函数。 关于编译SDK 对C++不熟悉,虽然网上有相关的讨... 阅读全文
摘要:
一般情况下,我们并不需要替换VCL的代码,但是,如果有某些特别的目的需要更改VCL中默认的执行逻辑的话,下面的东西应该有用。另一种方法是用Inject,但是,如果是你自己的程序,且有源码,用下面的办法就会省事的多了Procedure PatchVCLCode(ProcOld, ProcNew: Pointer);var newCode : packed record JmpRel32 : Byte; Offset32 : Integer; end;begin newCode.JmpRel32 := $E9; newCode.Offset32 := Integer(p... 阅读全文
摘要:
纯计算方式:procedure ByteCrc(data:byte;var crc:word);VAR i:BYTE;BEGIN FOR i:=0 TO 7 DO BEGIN IF ((data and $01)XOR(crc AND $0001)<>0) THEN BEGIN crc:=crc shr 1; crc:= crc XOR $A001; END ELSE crc:=crc shr 1; data:=data shr 1; // this line is not ELSE and executed anyway. END;END;func... 阅读全文