📄 udp_cli.cpp
字号:
/* UDP echo client to be run against Silicon Laboratories MODEM-DK in UDP echo server mode.
compile with: cl udp_cli.cpp wsedesc.cpp wsock32.lib
Usage: udp_cli ( defaults to 216.233.5.26, 7 )
udp_cli [dest ip addr] ( defaults to port 7 )
udp_cli [dest ip addr] [dest port]
PJB, 11/20/01, 10/24/02
*/
#include <stdio.h>
#include <string.h>
#include <winsock.h>
// Function prototype
void DatagramClient(long lIP_addr, short nPort);
// Helper macro for displaying errors
LPCSTR WSErrorDescription(int);
#define PRINTERROR(s) \
fprintf(stderr,"\n%s: %s\n", s, WSErrorDescription(WSAGetLastError()))
////////////////////////////////////////////////////////////
void main(int argc, char **argv)
{
WORD wVersionRequested = MAKEWORD(1,1);
WSADATA wsaData;
int nRet;
short nPort;
//
// Initialize WinSock and check the version
//
nRet = WSAStartup(wVersionRequested, &wsaData);
if (nRet != 0 || wsaData.wVersion != wVersionRequested)
{
fprintf(stderr,"\nError: wrong WinSock version\n");
return;
}
char ip_addr[16];
long lIP_addr;
memset(ip_addr,0,16);
/* get Port number from command line, use 7 if none given */
if (argc == 3)
{
nPort = atoi(argv[2]);
if (nPort <= 0)
{
printf("Bad port number!");
return;
}
}
else
nPort = 7; // well known echo port
/* get IP address from command line, use 216.233.5.26 if none given */
if (argc >= 2)
strcpy(ip_addr,argv[1]);
else
strcpy(ip_addr,"216.233.5.26");
lIP_addr = inet_addr(ip_addr);
if (lIP_addr == INADDR_NONE)
{
printf("Bad IP address!");
return;
}
//
// Go do all the stuff a datagram client does
//
DatagramClient(lIP_addr,nPort);
//
// Release WinSock
//
WSACleanup();
}
////////////////////////////////////////////////////////////
void DatagramClient(long lIP_addr, short nPort)
{
printf("\nUDP Client sending to UDP Echo Server...");
//
// Create a UDP/IP datagram socket
//
SOCKET theSocket;
theSocket = socket(AF_INET, // Address family
SOCK_DGRAM, // Socket type
IPPROTO_UDP); // Protocol
if (theSocket == INVALID_SOCKET)
{
PRINTERROR("socket()");
return;
}
//
// Fill in the address structure for the server
//
SOCKADDR_IN saServer;
saServer.sin_family = AF_INET;
saServer.sin_addr.S_un.S_addr = lIP_addr;
saServer.sin_port = htons(nPort);
int nPacket = 0;
while (1)
{
//
// Send data to the server
//
char szBuf[1500];
int nRet;
nPacket++;
sprintf(szBuf, "This is UDP echo packet #%d.",nPacket);
nRet = sendto(theSocket, // Socket
szBuf, // Data buffer
strlen(szBuf), // Length of data
0, // Flags
(LPSOCKADDR)&saServer, // Server address
sizeof(struct sockaddr)); // Length of address
if (nRet == SOCKET_ERROR)
{
PRINTERROR("sendto()");
break;
}
//
// Wait for the reply
//
memset(szBuf, 0, sizeof(szBuf));
int nFromLen;
nFromLen = sizeof(struct sockaddr);
recvfrom(theSocket, // Socket
szBuf, // Receive buffer
sizeof(szBuf), // Length of receive buffer
0, // Flags
(LPSOCKADDR)&saServer, // Buffer to receive sender's address
&nFromLen); // Length of address buffer
if (nRet == SOCKET_ERROR)
{
PRINTERROR("recvfrom()");
break;
}
//
// Display the data that was received
//
printf("\nData received: %s", szBuf);
}
closesocket(theSocket);
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -