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

📄 tcp_cli.cpp

📁 C8051F120单片机TCP协议栈,主体眶架,从美国人LIB库中导出
💻 CPP
字号:
/* TCP echo client to be run against Silicon Laboratories ETHERNET-DK in TCP echo server mode.

	compile with: cl tcp_cli.cpp wsedesc.cpp wsock32.lib

   Usage: tcp_cli                            ( defaults to 216.233.5.26, 7 )
          tcp_cli [dest ip addr]             ( defaults to port 7 )
          tcp_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 StreamClient(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 the stuff a stream client does
	//
	StreamClient(lIP_addr,nPort);

	
	//
	// Release WinSock
	//
	WSACleanup();
}

////////////////////////////////////////////////////////////

void StreamClient(long lIP_addr, short nPort)
{
	printf("\nTCP Client sending to TCP Echo Server...");

	//
	// Create a TCP/IP stream socket
	//
	SOCKET	theSocket;

	theSocket = socket(AF_INET,				// Address family
					   SOCK_STREAM,			// Socket type
					   IPPROTO_TCP);		// Protocol
	if (theSocket == INVALID_SOCKET)
	{
		PRINTERROR("socket()");
		return;
	}

	//
	// Fill in the address structure
	//
	SOCKADDR_IN saServer;

	saServer.sin_family = AF_INET;
	saServer.sin_addr.S_un.S_addr = lIP_addr;
	saServer.sin_port = htons(nPort);

	//
	// connect to the server
	//
	int nRet;

	nRet = connect(theSocket,				// Socket
				   (LPSOCKADDR)&saServer,	// Server address
				   sizeof(struct sockaddr));// Length of server address structure
	if (nRet == SOCKET_ERROR)
	{
		PRINTERROR("socket()");
		closesocket(theSocket);
		return;
	}

	int nPacket = 0;

	while (1)
		{
		//
		// Send data to the server
		//
		char szBuf[1500];

		nPacket++;
		sprintf(szBuf, "This is TCP echo packet #%d.",nPacket);
		nRet = send(theSocket,				// Connected socket
				szBuf,					// Data buffer
				strlen(szBuf),			// Length of data
				0);						// Flags
		if (nRet == SOCKET_ERROR)
			{
			PRINTERROR("send()");
			break;
			}


		//
		// Wait for a reply
		//
		nRet = recv(theSocket,				// Connected socket
				szBuf,					// Receive buffer
				sizeof(szBuf),			// Size of receive buffer
				0);						// Flags
		if (nRet == SOCKET_ERROR)
			{
			PRINTERROR("recv()");
			break;
			}


		//
		// Display the received data
		//
		printf("\nData received: %s", szBuf);
		}

	closesocket(theSocket);
	return;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -