📄 tcpclient.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 + -