版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、 PAGE 7/ SendUDP.cpp : Defines the entry point for the application./#include stdafx.h#include resource.h#include #include #pragma comment(lib, ws2_32)#include TCPIP.h#define MAX_LOADSTRING 100int SendUdp(char *, int , char *, int);void ShowWsaErrorString(char *);void GetHostAddress(SOCKADDR_IN *);vo
2、id CreateAddrPortEditRect(HWND, char *, int);void GetAddrPortEditInt(HWND, char *, int *);void CreateTextEditRect(HWND);void SendTextEdit(HWND);void ExitTextEdit(HWND);SOCKADDR_IN addr_in, addr_out;int SrcPort = 64321;int DstPort = 61234;char DstAddr16 = 192.168.0.103;char PacketText256 = UDP;BOOL S
3、endPacketText = FALSE;/ Global Variables::LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam):switch (message) case WM_COMMAND:wmId = LOWORD(wParam); wmEvent = HIWORD(wParam); / Parse the menu selections:switch (wmId)case IDM_SENDUDP:SendUdp(DstAddr, DstPort, PacketText,
4、strlen(PacketText);break;case IDM_SETDSTADDRPORT:EnableMenuItem(GetMenu(hWnd), IDM_SETPACKETTEXT, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);EnableMenuItem(GetMenu(hWnd), IDM_SENDUDP, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);CreateAddrPortEditRect(hWnd, DstAddr, DstPort);break; case IDM_GETDSTADDRPORT:G
5、etAddrPortEditInt(hWnd, DstAddr, &DstPort);EnableMenuItem(GetMenu(hWnd), IDM_SETPACKETTEXT, MF_BYCOMMAND | MF_ENABLED);EnableMenuItem(GetMenu(hWnd), IDM_SENDUDP, MF_BYCOMMAND | MF_ENABLED);break;case IDM_SETPACKETTEXT:EnableMenuItem(GetMenu(hWnd), IDM_SETDSTADDRPORT, MF_BYCOMMAND | MF_DISABLED | MF_
6、GRAYED);EnableMenuItem(GetMenu(hWnd), IDM_SENDUDP, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);CreateTextEditRect(hWnd);break; case IDM_SENDPACKETTEXT:SendTextEdit(hWnd);SendUdp(DstAddr, DstPort, PacketText, strlen(PacketText);break;case IDM_EXITPACKETTEXT:ExitTextEdit(hWnd);EnableMenuItem(GetMenu(hWnd)
7、, IDM_SETDSTADDRPORT, MF_BYCOMMAND | MF_ENABLED);EnableMenuItem(GetMenu(hWnd), IDM_SENDUDP, MF_BYCOMMAND | MF_ENABLED);break;: return 0;:int InitIpHeader(char *ipBuffer, char *SrcAddr, char *DstAddr, int PayLoadLen)/ IP 头初始化 IP *ip=NULL; ip = (IP *)ipBuffer; ip-Version = (4 ServiceType = 0; ip-Total
8、Len= htons(sizeof(IP) + PayLoadLen); ip-ID= 0; ip-FragOff = 0; ip-TimeToLive= 6; ip-Protocol= 0 x11; ip-HdrChksum = 0; ip-SrcAddr= inet_addr(SrcAddr); ip-DstAddr= inet_addr(DstAddr);/ ip-HdrChksum; return sizeof(IP);int InitUdpHeader(char *Buffer, int SrcPort, int DstPort, int PayLoadLen) UDP *udp =
9、 NULL; udp = (UDP *)Buffer; udp-SrcPort = htons(SrcPort); udp-DstPort = htons(DstPort); udp-TotalLen= htons(sizeof(UDP) + PayLoadLen);/udp-Chksum return sizeof(UDP);char snString1024;int SendUdp(char *DstAddr, int DstPort, char *UdpBuffer, int UdpBufferSize) WSADATA wsaData; SOCKET SendSocket; charS
10、endBuffer65535=0;intIpHdrLen, UdpHdrLen, TotalSize;int flag; intret; TotalSize = sizeof(IP) + sizeof(UDP) + UdpBufferSize;/ 检查 Winsock 版本号,WSAData为WSADATA结构对象 if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) ShowWsaErrorString(Send WSAStartup); return -1; / 创建原始套接字SendSocket = socket(AF_INET, SOCK_RAW,
11、 IPPROTO_UDP);if (SendSocket = INVALID_SOCKET) ShowWsaErrorString(Send Socket);goto retSend; / 设置IP头, 包括optionflag = 1; if (setsockopt(SendSocket, IPPROTO_IP, IP_HDRINCL, (char *)&flag, sizeof(flag) = SOCKET_ERROR) ShowWsaErrorString(Send opt);goto retSend; GetHostAddress(&addr_in); if (bind(SendSoc
12、ket, (PSOCKADDR)&addr_in, sizeof(addr_in) = SOCKET_ERROR) ShowWsaErrorString(Send bind);goto retSend; / 初始化IP头IpHdrLen = InitIpHeader(SendBuffer, inet_ntoa(addr_in.sin_addr), DstAddr, UdpBufferSize);/ 发给指定主机/IpHdrLen = InitIpHeader(SendBuffer, inet_ntoa(addr_in.sin_addr), inet_ntoa(addr_in.sin_addr)
13、, UdpBufferSize);/ 发给本机 / 初始化UDP头 UdpHdrLen = InitUdpHeader(&SendBufferIpHdrLen, SrcPort, DstPort, UdpBufferSize); / Copy the payload to the end of the header memcpy(&SendBufferIpHdrLen + UdpHdrLen, UdpBuffer, UdpBufferSize); addr_out.sin_family = AF_INET; addr_out.sin_port = htons(DstPort); addr_ou
14、t.sin_addr.s_addr = inet_addr(DstAddr); ret = sendto(SendSocket, SendBuffer, TotalSize, 0, (const struct sockaddr*)&addr_out, sizeof(addr_out); if (ret = SOCKET_ERROR) ShowWsaErrorString(Send to);goto retSend; else wsprintf(snString, sourAddr=%s, inet_ntoa(addr_in.sin_addr);wsprintf(snString, %s, ds
15、tAddr=%s, snString, inet_ntoa(addr_out.sin_addr);wsprintf(snString, %s, sourPort=%d, dstPort=%d, sendsize=%d, snString, ntohs(addr_in.sin_port), ntohs(addr_out.sin_port), ret); if (!SendPacketText) MessageBox(NULL, snString, sent OK, MB_OK); retSend: closesocket(SendSocket) ; WSACleanup() ; return 0
16、;void ShowWsaErrorString(char *ErrorType)int i, WSAErrorID;char WSAErrorType128;WSAErrorID = WSAGetLastError();wsprintf(WSAErrorType, 错误代码:%d, WSAErrorID);for (i=0; isin_addr = *(in_addr *)pHost-h_addr_list0; /IPaddrin-sin_family = AF_INET;addrin-sin_port = htons(SrcPort);HWND hAddrEdit, hPortEdit,
17、hButton; RECT hAddrPortEditRect = 170, 100, 300, 130;void CreateAddrPortEditRect(HWND hWnd, char *SetDstAddr, int SetDstPort)char hEditString16;HDC hDC;hDC = GetDC(hWnd);TextOut(hDC, hAddrPortEditRect.left-120, hAddrPortEditRect.top+4, 目的主机IP地址:, 16);TextOut(hDC, hAddrPortEditRect.left-120, hAddrPor
18、tEditRect.top+44, 目的端口号: , 16);ReleaseDC(hWnd, hDC);hAddrEdit = CreateWindow(EDIT, NULL, WS_CHILD|WS_VISIBLE|ES_LEFT|WS_THICKFRAME, hAddrPortEditRect.left, hAddrPortEditRect.top, hAddrPortEditRect.right-hAddrPortEditRect.left, hAddrPortEditRect.bottom-hAddrPortEditRect.top, hWnd, NULL, hInst, NULL);
19、 hPortEdit = CreateWindow(EDIT, NULL, WS_CHILD|WS_VISIBLE|ES_LEFT|WS_THICKFRAME, hAddrPortEditRect.left, hAddrPortEditRect.top+40, hAddrPortEditRect.right-hAddrPortEditRect.left, hAddrPortEditRect.bottom-hAddrPortEditRect.top, hWnd, NULL, hInst, NULL); SetWindowText(hAddrEdit, SetDstAddr);itoa(SetDs
20、tPort, hEditString, 10);SetWindowText(hPortEdit, hEditString);hButton = CreateWindow(BUTTON, 确定, WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, hAddrPortEditRect.left-50, hAddrPortEditRect.top+100, hAddrPortEditRect.right-hAddrPortEditRect.left-40, hAddrPortEditRect.bottom-hAddrPortEditRect.top, hWnd, (HMENU)ID
21、M_GETDSTADDRPORT, hInst, NULL); void GetAddrPortEditInt(HWND hWnd, char *GetDstAddr, int *GetDstPort)char hEditString16;HDC hDC; GetWindowText(hAddrEdit, hEditString, 15); if (strlen(hEditString) 4) return;strcpy(GetDstAddr, hEditString); GetWindowText(hPortEdit, hEditString, 15); if (strlen(hEditSt
22、ring) 1) return;*GetDstPort = atoi(hEditString);DestroyWindow(hAddrEdit);DestroyWindow(hPortEdit);DestroyWindow(hButton);hDC = GetDC(hWnd);TextOut(hDC, hAddrPortEditRect.left-120, hAddrPortEditRect.top+4, , 16);TextOut(hDC, hAddrPortEditRect.left-120, hAddrPortEditRect.top+44, , 16);ReleaseDC(hWnd,
23、hDC);HWND hTextEdit, hTextButton, hTextExitButton; RECT hTextEditRect = 100, 100, 1000, 130;void CreateTextEditRect(HWND hWnd)HDC hDC;hDC = GetDC(hWnd);TextOut(hDC, hTextEditRect.left, hTextEditRect.top+10, 请输入要传送的报文:, 20);ReleaseDC(hWnd, hDC);hTextEdit = CreateWindow(EDIT, NULL, WS_CHILD|WS_VISIBLE|ES_LEFT|WS_THICKFRAME, hTextEditRect.left, hTextEditRect.top+40, 1000, 30, hWnd, NULL, hInst, NULL); hTextButton = CreateWindow(BUTTON, 发送, WS_CHILD|WS_VISIBLE|BS_PUSHBUTTON, (hTextEditRect.left+hTextEditRect.right)/2-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026江苏南通大学招聘119人备考题库(一)及答案详解1套
- 2026福建省寿宁县教育局补充招聘紧缺急需及高层次教师5人备考题库及答案详解(历年真题)
- 2026湖北武汉洪山区七-二社区卫生服务站招聘备考题库及完整答案详解一套
- 2026温州医科大学附属眼视光医院(浙江省眼科医院)招聘17人备考题库第二批及一套完整答案详解
- 2026陕西铜川市招聘国家公费师范毕业生及优师计划毕业生36人备考题库及答案详解(全优)
- 2026江苏南京大学SZXZ2026-016先进制造学院助理招聘备考题库附答案详解(考试直接用)
- 建筑施工危险作业安全管理方案
- 混凝土废水处置方案
- 高血压急症处理及长期降压方案
- 沉砂池故障处置方案
- 期刊系统使用说明书第二版
- 2024年广西机场管理集团有限责任公司招聘笔试参考题库含答案解析
- 工业机器人职业生涯规划书
- 听力残疾的评定课件
- 阿奇舒勒矛盾矩阵表
- 心肌缺血再灌注损伤研究进展
- 预制梁整体双轨自行式钢台座设计
- 第一章-总论课件
- 日本京都大学的敦煌学研究
- 混凝土搅拌站安全风险分级管控资料
- 爱国卫生运动课件
评论
0/150
提交评论