


版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 神经内科设备培训
- 校园宿舍闲置空地的利用设计
- 车辆借用与租赁车辆保险理赔责任合同范本
- 商业地产项目场地承包经营合作协议书
- 餐饮企业员工劳动合同范本及培训考核合同
- 特色主题餐厅经营合作协议
- 党建联学共建项目合作协议书
- 车辆抵押担保汽车维修担保服务合同
- 汽车抵押典当贷款业务合作协议
- 车棚租赁与停车诱导系统合作协议
- 水工混凝土建筑物修补加固技术规程
- 经皮冠状动脉介入治疗术术后健康饮食宣教
- 【语文】福建省厦门市演武小学小学二年级下册期末试题
- 2021-2022学年山东省东营市广饶县七年级(下)期末英语试卷(五四学制)(附答案详解)
- 卧式常压热水锅炉使用说明书
- (完整版)新人教版英语七年级下册单词听写表
- 酒店住宿水单模板2020
- 23J916-1:住宅排气道(一)
- 第十章开箱包检查课件
- 物业公司权责手册市场拓展
- 小学生小升初中自荐信5篇
评论
0/150
提交评论