一个简单的tcp客户端实例_第1页
一个简单的tcp客户端实例_第2页
一个简单的tcp客户端实例_第3页
一个简单的tcp客户端实例_第4页
一个简单的tcp客户端实例_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

#pragmacomment(lib,"ws2_32.lib")#include<STDIO.H>#include<WINSOCK2.H>SOCKETg_sockClient=INVALID_SOCKET;//提示程序的使用方法voidusage();//捕获关闭信息BOOLWINAPICtrlHandler(DWORDdwEvent);intmain(intargc,char*argv[]){unsignedlongdestAddr;//目标地址intnPort;//目标端口//只有两个参数,即没有给出端口号if(argc==2){destAddr=inet_addr(argv[1]);//获取要连接的目标主机的IP地址if(destAddr==INADDR_NONE){usage();〃不是合法的IP地址,则显示程序的使用方法return-1;}nPort=23;//取得IP地址之后,默认目标端口号为23,即telnet端口else〃给出了目标IP地址和目标TCP端口号if(argc==3){destAddr=inet_addr(argv[1]);〃获取要连接的目标主机的IP地址if(destAddr==INADDR_NONE){usage();〃不是合法的IP地址,则提示程序的使用方法return-1;}nPort=atoi(argv[2]);//获取目标端口号if(nPort<=0||nPort>65535){usage();//端口非法,提示用户本程序正确的使用方法return-1;}}else{//没有给出参数,则提示用户本程序正确的使用方法usage();return-1;}〃以上步骤之后,获得了目标IP,和目标TCP端口〃设置钩子,捕获控制台程序的关闭消息if(!SetConsoleCtrlHandler(CtrlHandler,TRUE)){printf("SetConsoleCtrlHandler:%d\n”,GetLastError());return-1;}//初始化WinsockWSADATAwsaData;WSAStartup(WINSOCK_VERSION,&wsaData);//创建SOCK_STREAM类型的套接口g_sockClient=socket(AF_INET,SOCK_STREAM,0);//如果创建失败,则处理if(g_sockClient==INVALID_SOCKET)(WSACleanup();return-1;}//定义sockaddr_in类型的结构变量tostructsockaddr_into;//初始化tomemset(&to,0,sizeof(to));〃给to的成员变量赋值to.sin_addr.s_addr=destAddr;//IP地址to.sin_family=AF_INET;//地址族to.sin_port=htons(nPort);//端口号〃显示用户正要连接的IP和端口号printf("connecting%s:%d ”,inet_ntoa(to.sin_addr),nPort);//如果connect连接不成功,处理if(connect(g_sockClient,(structsockaddr*)&to,sizeof(to))==SOCKET_ERROR)(if(g_sockClient!=INVALID_SOCKET)closesocket(g_sockClient);//关闭套接字g_sockClientprintf("Failed.(connect%d)\n",WSAGetLastError());WSACleanup();return-1;}elseprintf("Successfully.\n");//提示连接成功//定义83字节的数组,用于发送数据charbufa[83];//定义1000字节的数组,用于接收服务器返回的信息charbufb[1000];〃为了使用select检查是否有数据到来,定义端口描述字集合fd_setreadSet;//定义select函数的超时值,timeval类型结构体tvstructtimevaltv;intret,len;〃不断的发送数据、接收数据while(1){//初始化发送数据缓存memset(bufa,0,83);〃读取用户输入的一行信息到bufagets(bufa);//最多取输入的前80个字符len=strlen(bufa);if(len>80)len=80;bufa[len]='\r';bufa[len+1]='\n';bufa[len+2]=0;〃发送数据ret=send(g_sockClient,bufa,strlen(bufa),0);//如果发送失败,处理if(ret==SOCKET_ERROR)(printf("send:%d\n”,WSAGetLastError());break;}//初始化readSetFD_ZERO(&readSet);//将套接字g_sockClient加入readSetFD_SET(g_sockClient,&readSet);tv.tv_sec=3;//3秒tv.tv_usec=0;//毫秒最长等待时间为3秒+0毫秒〃调用select,有数据可读或等待超时返回ret=select(0,&readSet,NULL,NULL,&tv);//如果调用select结果返回出错if(ret==SOCKET_ERROR)(printf("selcet:%d\n”,WSAGetLastError());break;}//如果select等待超时:if(ret=0)(printf("Timeout,NoResponseFromServer.\n");break;}//如果g_sockClient在readSet里面,即g_sockClient这时候可读if(FD_ISSET(g_sockClient,&readSet)){//准备接收数据memset(bufb,0,1000);//接收数据ret=recv(g_sockClient,bufb,1000,0);//接收数据失败,则提示if(ret==SOCKET_ERROR)(printf("recv:%d\n”,WSAGetLastError());break;}else{printf("%s",bufb);//接收成功,则显示接收到的数据}}}//关闭g_sockClientif(g_sockClient!=INVALID_SOCKET)closesocket(g_sockClient);//卸载WSACleanup();printf("Stopped.\n");return0;voidusage(){printf("usage:\tmyelnetx.x.x.xport\t\t\t(0<port<65535)\n");}BOOLWINAPICtrlHandler(DWORDdwEvent){switch(dwEvent){caseCTRL_C_EVENT://用户按下CTRL+CcaseCTRL_LOGOFF_EVENT://当前用户注销caseCTRL_SHUTDOWN_EVENT://系统关闭caseCTRL

温馨提示

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

评论

0/150

提交评论