1、/***************************************************************** * * Description: * TCP协议传输测试,客户端 * * Usage: * sender [-p:int] [-r:IP] [-n:x] [-b:x] [-t:x] * -p:int 服务器监听端口 * -r:IP 服务器IP * -n:x 发送包的次数 * -b:x 发送包的大小 * -t:x 发送间隔 * c1-2015/12/26
2、 *****************************************************************/
#include
3、'a' //默认填充字符 #define DEFAULT_BUFFER_LENGTH 8192 //默认包大小是8K #define DEFAULT_INTERVAL 1000 //默认间隔时间是1秒 #define DEFAULT_PER_COUNT 1 //默认每一次发送的包个个数 BOOL bConnect = FALSE; // 先连接服务器标志 int iPort = DEFAULT_PORT; int itime = DEFAULT_INT
4、ERVAL; char cChar = DEFAULT_CHAR; int dwCount = DEFAULT_COUNT; int dwLength = DEFAULT_BUFFER_LENGTH; int dwPcount = DEFAULT_PER_COUNT; char szRecipient[128]; // 服务器地址 /********************************************* * Function: usage * Description: * 打印帮助信息
5、并退出 ********************************************/ void tip(char *name) { printf("usage: %s [-p:int] [-r:IP] [-n:x] [-b:x] [-d:c] [-m:x]\n\n", name); printf(" -p:int 服务器监听端口, 缺省为%d\n", DEFAULT_PORT); printf(" -r:IP 服务器IP\n"); printf(" -n:x 发送数据次数, 缺
6、省为%d次\n", DEFAULT_COUNT); printf(" -b:x 发送包的大小,缺省为%d字节\n",DEFAULT_BUFFER_LENGTH); printf(" -t:x 发送间隔时间,缺省为%d秒\n",DEFAULT_INTERVAL); printf(" -m:x 每次发送包的个数,缺省值为%d个\n",DEFAULT_PER_COUNT); ExitProcess(1); } /*****************************************
7、 * Function: ValidateArgs * Description: * 命令行解析 ********************************************/ void ValidateArgs(int argc, char **argv) { int i; if (argc < 2) tip(argv[0]); for (i = 1; i < argc; i++) { if (strlen(argv[i]) <= 3 || strchr("-/", *argv[i]) == NULL) {
8、 continue; } switch (tolower(argv[i][1])) { case 'p': if (strlen(argv[i]) > 3) iPort = atoi(&argv[i][3]); break; case 'r': if (strlen(argv[i]) > 3)
9、 strcpy(szRecipient, &argv[i][3]); break; case 'n': if (strlen(argv[i]) > 3) dwCount = atol(&argv[i][3]); break; case 'b': if (strlen(argv[i]) > 3) dwLength = atol(&argv[i][3]); break; case 't': if (strlen(argv[
10、i]) > 3) itime = atol(&argv[i][3]); break; case 'm': if(strlen(argv[i])>3) dwPcount=atol(&argv[i][3]); break; default: tip(argv[0]); break; } } } int main(int argc, char **argv) { WSADATA wsd; SOCKET s; char *sendbuf=NUL
11、L; int ret; int i,j; SOCKADDR_IN serverIP; ValidateArgs(argc, argv); if (WSAStartup(MAKEWORD(2, 2), &wsd) !=NO_ERROR) { printf("WSAStartup() failed!\n"); return 1; } //TCP客户端启动 s = socket(AF_INET, SOCK_STREAM, 0); if (s == INVALID_SOCKET) { printf("so
12、cket() failed: %d\n", WSAGetLastError()); return 1; } // 服务器地址设置 serverIP.sin_family = AF_INET; serverIP.sin_port = htons((short)iPort); serverIP.sin_addr.s_addr = inet_addr(szRecipient); if (serverIP.sin_addr.s_addr== INADDR_NONE) { struct hostent *host = NULL; host = g
13、ethostbyname(szRecipient); if (host) CopyMemory(&serverIP.sin_addr, host->h_addr_list[0], host->h_length); else { printf("gethostbyname() failed: %d\n", WSAGetLastError()); WSACleanup(); return 1; } } printf("服务器监听端口:%d\t发送包的次数: %d\n",iPort, dwCount); printf(
14、"发送包的大小:%d\t包的时间间隔:%d\n",dwLength, itime); printf("每次发送包的个数:%d\n",dwPcount); //设置发送缓冲区 sendbuf =(char *) GlobalAlloc(GMEM_FIXED, dwLength); if (!sendbuf) { printf("GlobalAlloc() failed: %d\n", GetLastError()); return 1; } sendbuf[dwLength-1] = '\0';
15、 memset(sendbuf, cChar, (dwLength-1));
//连接服务器
//依照指定次数和发送间隔发送数据包
for (i = 0; i 16、failed: %d\n", WSAGetLastError());
closesocket(s);
WSACleanup();
return 1;
}
ret = send(s, sendbuf, dwLength, 0);
if (ret == SOCKET_ERROR)
{
printf("send() failed: %d\n", WSAGetLastError());
break;
}
else if ( ret == 0)
break;
closesocket(s);
17、
}
Sleep(itime);
}
closesocket(s);
GlobalFree(sendbuf);
WSACleanup();
return 0;
}
/**************************
c1-2015.12.26
**************************/
#include 18、fine DEFAULT_PORT 8888
#define DEFAULT_LISTEN_QUEUE 1000
#define MAX_BUF_LENGTH 10240
int main(void)
{
WSADATA wsd;
SOCKET servListen, servAccept;
char *recvBuf = NULL;
int ret;
int dwTcpClientSize;
SOCKADDR_IN tcpClienter, local;
//初始化socket 19、环境
if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
{
printf("WSAStartup() failed!\n");
return 1;
}
//TCP服务器启动设置
servListen = socket(AF_INET, SOCK_STREAM, 0);
if (servListen == INVALID_SOCKET)
{
printf("socket() failed: %d\n", WSAGetLastError());
return 1;
}
memset(&local 20、 0, sizeof(local));
local.sin_family = AF_INET;
local.sin_addr.s_addr = htonl(INADDR_ANY);
local.sin_port = htons(DEFAULT_PORT);
//绑定本地地址
if (bind(servListen, (SOCKADDR *)&local, sizeof(local)) == SOCKET_ERROR)
{
printf("bind() failed: %d\n", WSAGetLastError());
return 1;
} 21、
//设置监听队列长度
if (listen(servListen, DEFAULT_LISTEN_QUEUE) == -1)
{
printf("listen() failed: %d\n", WSAGetLastError());
return 1;
}
//设置接收缓冲区
recvBuf =(char *) GlobalAlloc(GMEM_FIXED, MAX_BUF_LENGTH);
if (!recvBuf)
{
printf("GlobalAlloc() failed: %d\n", Get 22、LastError());
return 1;
}
memset(recvBuf,0, sizeof(MAX_BUF_LENGTH));
printf("等待连接......\n");
dwTcpClientSize = sizeof(tcpClienter);
while(1)
{
servAccept = accept(servListen, (struct sockaddr *)&tcpClienter,
&dwTcpClientSize);
if ( servAccept == INVALID_SOC 23、KET)
{
printf("accept() failed: %d\n", WSAGetLastError());
break;
}
ret = recv(servAccept, recvBuf, sizeof(recvBuf), 0);
if (ret < 0)
{
printf("recv() failed: %d\n", WSAGetLastError());
break;
}
ret=ret*2*1024;
printf("\n----------- 24、\n");
printf("from %s recived %d bytes\n",inet_ntoa(tcpClienter.sin_addr),ret);
printf("------------------------------------------------\n");
closesocket(servAccept);
GlobalFree(recvBuf);
}
closesocket(servListen);
GlobalFree(recvBuf);
WSACleanup();
return 0;}
7






