1 |
/*********************************************************************
|
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 |
|