扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
作者:PITER 来源:论坛 2007年11月1日
关键字:
{ Const Max_Message = 4068; type TPacketBuffer = Array[0..Max_Packet-1] of byte; TForm1 = class(TForm) // IP 头 // UDP 头 // 一些 Winsock 2 的类型声明 SunB = packed record const type file&://定义一些 winsock 2 函数 const IP_HDRINCL = 2; // IP Header Include SOCK_RAW = 3; // raw-protocol interface IPPROTO_IP = 0; // dummy for IP INVALID_SOCKET = TSocket(NOT(0)); var implementation // Import Winsock 2 functions function closesocket; external winsocket name 'closesocket';
function CheckSum(Var Buffer; Size : integer) : Word; if Size=1 then ChkSum := ChkSum + Byte(TWordArray(Buffer)); ChkSum := (ChkSum shr 16) + (ChkSum and $FFFF); Result := Word(ChkSum);
iIPVersion : Word; iUdpSize : Word; Ptr : ^Byte; procedure IncPtr(value : Integer); begin dwFromIP := inet_Addr(PChar(FromIP)); // 初始化 IP 头 iIPVersion := 4; ipHdr.ip_verlen := (iIPVersion shl 4) or iIPSize; udpHdr.src_portno := htons(iFromPort) iUdpChecksumSize := 0; ptr := @buf[0]; Move(ipHdr.ip_srcaddr, ptr^, SizeOf(ipHdr.ip_srcaddr)); iUdpChecksumSize := iUdpChecksumSize + sizeof(ipHdr.ip_srcaddr); Move(ipHdr.ip_destaddr, ptr^, SizeOf(ipHdr.ip_destaddr)); iUdpChecksumSize := iUdpChecksumSize + sizeof(ipHdr.ip_destaddr); IncPtr(1); Inc(iUdpChecksumSize); Move(ipHdr.ip_protocol, ptr^, sizeof(ipHdr.ip_protocol)); Move(udpHdr.udp_length, ptr^, sizeof(udpHdr.udp_length)); move(udpHdr, ptr^, sizeof(udpHdr)); Move(StrMessage[1], ptr^, Length(strMessage)); iUdpChecksumSize := iUdpChecksumSize + length(strMessage); cksum := checksum(buf, iUdpChecksumSize); // Move(ipHdr, ptr^, SizeOf(ipHdr)); IncPtr(SizeOf(ipHdr));
procedure TForm1.SendIt; begin try // Option: Header Include // Build the packet // Send the packet // Close socket procedure TForm1.Button1Click(Sender: TObject); end. |
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者