




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
#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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 物流行业股权收购项目操作流程
- 2025年叉车司机(中级)叉车安全知识与操作技能考试试卷
- 2025年电梯安装维修工电梯维护保养法规考试试卷2025
- 2025年车工(高级)职业技能鉴定试卷(含创新设计)
- 2025年宠物美容师职业技能考核试卷:实操考核重点与难点解析试题
- 2025年电梯安装维修人员考试试卷:电梯维修人员职业发展路径试题
- 钟表教学课件
- 针灸推拿技术课件
- 金融工程课件第五章
- 野餐绘本课件
- 2025年金融科技企业估值方法与投资策略在金融科技企业并购中的应用案例报告
- 农文旅项目可行性研究报告
- 《无人机介绍》课件
- 2025-2030中国硼酸行业市场发展现状及竞争格局与投资研究报告
- 学校中层干部选拔聘用实施方案中层干部选聘实施方案2
- 生物必修1教师用书
- 园艺植物育种学知到课后答案智慧树章节测试答案2025年春浙江大学
- 《电力机车制动系统检修与维护》课件 项目二任务四检修中继阀
- GB/T 15683-2025粮油检验大米直链淀粉含量的测定
- 2025吉林省安全员C证考试(专职安全员)题库及答案
- 电钻清洗消毒流程
评论
0/150
提交评论