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

📄 tcpclient.cpp

📁 这是一个tcp 的client 源程序,可以在单片机测试时使用.
💻 CPP
字号:
// tcpclient.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>


// Function prototype
void StreamClient(char *szServer, short nPort);
void GetAddress( unsigned char *add, char *str );

// Helper macro for displaying errors
#define PRINTERROR(s)	\
		fprintf(stderr,"\n%: %d\n", s, WSAGetLastError())

#define BUFFERSIZE  1 * 256		// sent to destination data size
////////////////////////////////////////////////////////////

int main(int argc, char* argv[])
{
	WORD wVersionRequested = MAKEWORD(1,1);
	WSADATA wsaData;
	int nRet;
	short nPort;

	//
	// Check for the host and port arguments
	//
	if (argc != 3)
	{
		fprintf(stderr,"\nSyntax: client ServerName PortNumber\n");
		return 1;
	}

	nPort = atoi(argv[2]);


	//
	// Initialize WinSock and check the version
	//
	nRet = WSAStartup(wVersionRequested, &wsaData);
	if (wsaData.wVersion != wVersionRequested)
	{	
		fprintf(stderr,"\n Wrong version\n");
		return 1;
	}


	//
	// Go do the stuff a stream client does
	//
	StreamClient(argv[1], nPort);

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

	return 0;
}

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

void StreamClient(char *szServer, short nPort)
{
	printf("\nStream Client connecting to server: %s on port: %d",
				szServer, nPort);

	//
	// Find the server
	//
    LPHOSTENT lpHostEntry;

	unsigned char addr[4];
	GetAddress( &addr[0], szServer);

    // lpHostEntry = gethostbyname(szServer);
	lpHostEntry = gethostbyaddr((const char *)&addr[0], 4, PF_INET );
    if (lpHostEntry == NULL)
    {
		DWORD err = WSAGetLastError();
        PRINTERROR("gethostbyname()");
        return;
    }

	//
	// 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 = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
										// ^ Server's address
	saServer.sin_port = htons(nPort);	// Port number from command line

	//
	// 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;
	}


	//
	// Send data to the server
	//
	char szBuf[BUFFERSIZE];

	// strcpy(szBuf, "From the Client: Hello PL629!");
//	memset( szBuf, 0x55, BUFFERSIZE );
	for (int i=0; i<BUFFERSIZE; i++)
		szBuf[i] = i;

	while(1){
		nRet = send(theSocket,				// Connected socket
					szBuf,					// Data buffer
					strlen(szBuf),			// Length of data
					0);						// Flags

		if (nRet == SOCKET_ERROR)
		{
			PRINTERROR("send()");
			closesocket(theSocket);
			return;
		}
	}

	//
	// 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()");
		closesocket(theSocket);
		return;
	}


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


	closesocket(theSocket);
	return ;
}


void GetAddress( unsigned char *addr, char *str )
{
	sscanf( str, "%d.%d.%d.%d", &addr[0], &addr[1], &addr[2], &addr[3] );
}

⌨️ 快捷键说明

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