| Line No. | Rev | Author | Line |
|---|---|---|---|
| 1 | 32 | kaklik | /********************************************************************* |
| 2 | * |
||
| 3 | * Microchip Announcement Detector |
||
| 4 | * |
||
| 5 | ********************************************************************* |
||
| 6 | * FileName: MCHPDetect.cpp |
||
| 7 | * Dependencies: Must be linked with Ws2_32.lib |
||
| 8 | * Processor: x86 |
||
| 9 | * Complier: Microsoft Visual C++ 6.0 |
||
| 10 | * Borland C++ Builder 6 |
||
| 11 | * Company: Microchip Technology, Inc. |
||
| 12 | * |
||
| 13 | * Software License Agreement |
||
| 14 | * |
||
| 15 | * This software is owned by Microchip Technology Inc. ("Microchip") |
||
| 16 | * and is supplied to you for use exclusively as described in the |
||
| 17 | * associated software agreement. This software is protected by |
||
| 18 | * software and other intellectual property laws. Any use in |
||
| 19 | * violation of the software license may subject the user to criminal |
||
| 20 | * sanctions as well as civil liability. Copyright 2006 Microchip |
||
| 21 | * Technology Inc. All rights reserved. |
||
| 22 | * |
||
| 23 | * This software is provided "AS IS." MICROCHIP DISCLAIMS ALL |
||
| 24 | * WARRANTIES, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE, NOT LIMITED |
||
| 25 | * TO MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND |
||
| 26 | * INFRINGEMENT. Microchip shall in no event be liable for special, |
||
| 27 | * incidental, or consequential damages. |
||
| 28 | * |
||
| 29 | * Author Date Comment |
||
| 30 | *~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
||
| 31 | * Howard Schlunder 10/8/04 Original |
||
| 32 | ********************************************************************/ |
||
| 33 | |||
| 34 | #define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers |
||
| 35 | |||
| 36 | #define UDPPort 30303 |
||
| 37 | |||
| 38 | #include <Winsock2.h> |
||
| 39 | #include <iostream> |
||
| 40 | #include <stdio.h> |
||
| 41 | |||
| 42 | |||
| 43 | |||
| 44 | int main(int argc, char* argv[]) |
||
| 45 | { |
||
| 46 | WSADATA WSAData; |
||
| 47 | SOCKET MySocket; |
||
| 48 | char PacketPayload[1500]; |
||
| 49 | int ret; |
||
| 50 | sockaddr_in MySocketInfo; |
||
| 51 | sockaddr RemoteAddr; |
||
| 52 | int RemoteAddrSize; |
||
| 53 | unsigned int MessageCount = 1; |
||
| 54 | |||
| 55 | |||
| 56 | if(WSAStartup((short)0x0202, &WSAData) != 0) |
||
| 57 | { |
||
| 58 | printf("WSAStartup failed!\n"); |
||
| 59 | return 1; |
||
| 60 | } |
||
| 61 | |||
| 62 | |||
| 63 | MySocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); |
||
| 64 | |||
| 65 | if(MySocket == INVALID_SOCKET) |
||
| 66 | { |
||
| 67 | std::cout << "Unable to create a socket.\n"; |
||
| 68 | WSACleanup(); |
||
| 69 | return 1; |
||
| 70 | } |
||
| 71 | |||
| 72 | |||
| 73 | MySocketInfo.sin_family = AF_INET; |
||
| 74 | MySocketInfo.sin_port = htons(UDPPort); |
||
| 75 | MySocketInfo.sin_addr.S_un.S_addr = htonl(ADDR_ANY); |
||
| 76 | ZeroMemory(&MySocketInfo.sin_zero, sizeof(MySocketInfo.sin_zero)); |
||
| 77 | |||
| 78 | ret = bind(MySocket, (const struct sockaddr *)&MySocketInfo, sizeof(MySocketInfo)); |
||
| 79 | if(ret == INVALID_SOCKET) |
||
| 80 | { |
||
| 81 | std::cout << "Bind procedure failed.\n"; |
||
| 82 | WSACleanup(); |
||
| 83 | return 1; |
||
| 84 | } |
||
| 85 | |||
| 86 | RemoteAddrSize = sizeof(RemoteAddr); |
||
| 87 | |||
| 88 | std::cout << "Microchip Announcement Detector\n" |
||
| 89 | "Copyright (c) 2004 Microchip Technology, Inc. Ver. 1.0 (Oct 06 2004)\n" |
||
| 90 | "Written by Howard Henry Schlunder\n\n" |
||
| 91 | "Waiting for data on UDP port " << UDPPort << "...\n\n"; |
||
| 92 | |||
| 93 | |||
| 94 | while(1) |
||
| 95 | { |
||
| 96 | ret = recvfrom(MySocket, PacketPayload, sizeof(PacketPayload), 0, &RemoteAddr, &RemoteAddrSize); |
||
| 97 | if(ret == SOCKET_ERROR) |
||
| 98 | { |
||
| 99 | std::cout << "Socket error while trying to receive.\n"; |
||
| 100 | WSACleanup(); |
||
| 101 | return 1; |
||
| 102 | } |
||
| 103 | |||
| 104 | PacketPayload[ret] = 0; // Null terminate |
||
| 105 | |||
| 106 | std::cout << "Total packets received: " << MessageCount++ << "\n" |
||
| 107 | << "Received " << ret << " bytes of data from " |
||
| 108 | << (unsigned char)RemoteAddr.sa_data[2] + '\0' << '.' |
||
| 109 | << (unsigned char)RemoteAddr.sa_data[3] + '\0' << '.' |
||
| 110 | << (unsigned char)RemoteAddr.sa_data[4] + '\0' << '.' |
||
| 111 | << (unsigned char)RemoteAddr.sa_data[5] + '\0' << '\n' |
||
| 112 | << PacketPayload << "\n\n"; |
||
| 113 | } |
||
| 114 | |||
| 115 | |||
| 116 | WSACleanup(); |
||
| 117 | return 0; |
||
| 118 | } |
||
| 119 |
Powered by WebSVN v2.8.3