VC 實現UDP資料報傳送

2021-09-01 05:41:57 字數 1704 閱讀 5977

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!

請見**

#include

#include

// 定義了ip_hdrincl

cinitsock thesock;/* 計算udp偽頭校驗和。udp校驗和基於如下幾個域: 源ip位址 目的ip位址 8位0域 8位協議域 16位udp長度 16位源埠號 16位目的埠號 16位udp封包長度 16位udp校驗和(0) udp淨荷 */

void

computeu***seudoheaderchecksum

(    ipheader    *piphdr,    udpheader *pudphdr,    char    *payload,    int      payloadlen    )

// 計算這個校驗和,將結果填充到udp頭 pudphdr->checksum = checksum((ushort*)buff, chksumlen);}int

main

(); // ip頭 ipheader *piphdr = (ipheader *)buff; piphdr->iphverlen = (4

<<4 | (sizeof(ipheader)/sizeof(ulong))); piphdr->iplength = ::htons(sizeof(ipheader) + sizeof(udpheader) + nmsglen); piphdr->ipttl = 128; piphdr->ipprotocol = ipproto_udp; piphdr->ipsource = ::inet_addr(szsourceip); piphdr->ipdestination = ::inet_addr(szdestip); piphdr->ipchecksum = checksum((ushort*)piphdr, sizeof(ipheader)); // udp頭 udpheader *pudphdr = (udpheader *)&buff[sizeof(ipheader)]; pudphdr->sourceport = htons(8888); pudphdr->destinationport = htons(ndestport); pudphdr->len = htons(sizeof(udpheader) + nmsglen); pudphdr->checksum = 0; char *pdata = &buff[sizeof(ipheader) + sizeof(udpheader)]; memcpy(pdata, szmsg, nmsglen); computeu***seudoheaderchecksum(piphdr, pudphdr, pdata, nmsglen); // 設定目的位址 sockaddr_in destaddr = ; destaddr.sin_family = af_inet; destaddr.sin_port = htons(ndestport); destaddr.sin_addr.s_un.s_addr = ::inet_addr(szdestip); // 傳送原始udp封包

int nret; for(int i=0; i<5; i++)   else   } ::closesocket(sraw); getchar(); return

0;}

給我老師的人工智慧教程打call!

使用 UDP 資料報傳送訊息

使用 udp 資料報傳送短的文字訊息實現是很簡單的並且提供可乙個非常輕量級的訊息傳遞通道。但是這種模式有很大的缺陷,就是不保證的資料的可靠性,有可能會存在丟包的情況,甚至嚴重的情況就是伺服器不可用的時候,會完全丟失你的訊息。不過這個任務會在有些情況下十分有作用 你不關心訊息是否丟失 你不想要終止程式...

VC 實現資料報嗅探

嗅探器 可以竊聽網路上流經的資料報。用集線器hub組建的網路是基於共享的原理的,區域網內所有的計算機都接收相同的資料報,而網絡卡構造了硬體的 過濾器 通過識別mac位址過濾掉和自己無關的資訊,嗅探程式只需關閉這個過濾器,將網絡卡設定為 混雜模式 就可以進行嗅探 用交換機switch組建的網路是基於 ...

TCP和UDP協議傳送資料報的大小

在進行udp程式設計的時候,因此傳送多少bytes比較好呢?當然,這個沒有唯一答案,相對於不同的系統,不同的要求,其得到的答案是不一樣的。乙太網資料幀長度必須在46 1500位元組之間,這是由乙太網的屋裡特性決定的。這個1500位元組被稱為鏈路層的mtu,但這並不是指鏈路層的長度被限制再1500位元...