⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 udp_cli.cpp

📁 实现了C8051F340单片机依据UDP协议传输数据
💻 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 + -