基于C语言环境下,实现TCP socket通信.doc_第1页
基于C语言环境下,实现TCP socket通信.doc_第2页
基于C语言环境下,实现TCP socket通信.doc_第3页
基于C语言环境下,实现TCP socket通信.doc_第4页
基于C语言环境下,实现TCP socket通信.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/* * *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-2011.9.8 */#include #include #include #pragma comment(lib, wsock32.lib)#define DEFAULT_PORT 8888 /默认端口号#define DEFAULT_COUNT 25 /默认发送次数#define DEFAULT_CHAR 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_INTERVAL;char cChar = DEFAULT_CHAR;int dwCount = DEFAULT_COUNT;int dwLength = DEFAULT_BUFFER_LENGTH;int dwPcount = DEFAULT_PER_COUNT;char szRecipient128; / 服务器地址/* *Function: usage *Description: *打印帮助信息并退出 */void tip(char *name) printf(usage: %s -p:int -r:IP -n:x -b:x -d:c -m:xnn, name); printf( -p:int 服务器监听端口, 缺省为%dn, DEFAULT_PORT); printf( -r:IP 服务器IPn);printf( -n:x 发送数据次数, 缺省为%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);/* *Function: ValidateArgs *Description: *命令行解析 */void ValidateArgs(int argc, char *argv)int i;if (argc 2)tip(argv0);for (i = 1; i argc; i+) if (strlen(argvi) 3) iPort = atoi(&argvi3); break; case r: if (strlen(argvi) 3) strcpy(szRecipient, &argvi3); break;case n:if (strlen(argvi) 3)dwCount = atol(&argvi3);break;case b:if (strlen(argvi) 3)dwLength = atol(&argvi3);break;case t:if (strlen(argvi) 3)itime = atol(&argvi3);break;case m:if(strlen(argvi)3)dwPcount=atol(&argvi3);break;default:tip(argv0);break;int main(int argc, char *argv)WSADATA wsd;SOCKET s;char *sendbuf=NULL;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(socket() failed: %dn, 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 = gethostbyname(szRecipient);if (host)CopyMemory(&serverIP.sin_addr, host-h_addr_list0,host-h_length);elseprintf(gethostbyname() failed: %dn,WSAGetLastError();WSACleanup();return 1;printf(服务器监听端口:%dt发送包的次数: %dn,iPort, dwCount);printf(发送包的大小:%dt包的时间间隔:%dn,dwLength, itime);printf(每次发送包的个数:%dn,dwPcount);/设置发送缓冲区 sendbuf =(char *) GlobalAlloc(GMEM_FIXED, dwLength); if (!sendbuf) printf(GlobalAlloc() failed: %dn, GetLastError(); return 1; sendbufdwLength-1 = 0; memset(sendbuf, cChar, (dwLength-1);/连接服务器/依照指定次数和发送间隔发送数据包for (i = 0; idwCount-(i*dwPcount); i+)for(j=0;jdwPcount;j+)s = socket(AF_INET, SOCK_STREAM, 0);if (connect(s, (SOCKADDR *)&serverIP, sizeof(serverIP) =SOCKET_ERROR) printf(connect() failed: %dn, WSAGetLastError();closesocket(s);WSACleanup();return 1;ret = send(s, sendbuf, dwLength, 0);if (ret = SOCKET_ERROR)printf(send() failed: %dn, WSAGetLastError();break;else if ( ret = 0)break;closesocket(s);Sleep(itime);closesocket(s);GlobalFree(sendbuf);WSACleanup();return 0;/* c1-2011.9.8*/#include #include #include #pragma comment(lib, wsock32.lib)#define DEFAULT_PORT 8888#define DEFAULT_LISTEN_QUEUE 1000#define MAX_BUF_LENGTH 10240int main(void)WSADATA wsd;SOCKET servListen, servAccept;char *recvBuf = NULL;int ret;int dwTcpClientSize;SOCKADDR_IN tcpClienter, local;/初始化socket环境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: %dn, WSAGetLastError();return 1;memset(&local, 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: %dn, WSAGetLastError();return 1;/设置监听队列长度if (listen(servListen, DEFAULT_LISTEN_QUEUE) = -1) printf(listen() failed: %dn, WSAGetLastError();return 1;/设置接收缓冲区 recvBuf =(char *) GlobalAlloc(GMEM_FIXED, MAX_BUF_LENGTH); if (!recvBuf) printf(GlobalAlloc() failed: %dn, GetLastError(); 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_SOCKET) printf(accept() failed: %dn, WSAGetLastError();break;ret = recv(servAccept, recvBuf, sizeof(recvBuf), 0);if (ret 0) printf(recv() failed: %dn, WSAGe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论