一個(gè)簡單的tcp客戶端實(shí)例_第1頁
一個(gè)簡單的tcp客戶端實(shí)例_第2頁
一個(gè)簡單的tcp客戶端實(shí)例_第3頁
一個(gè)簡單的tcp客戶端實(shí)例_第4頁
一個(gè)簡單的tcp客戶端實(shí)例_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

#pragmacomment(lib,"ws2_32.lib")#include<STDIO.H>#include<WINSOCK2.H>SOCKETg_sockClient=INVALID_SOCKET;//提示程序的使用方法voidusage();//捕獲關(guān)閉信息BOOLWINAPICtrlHandler(DWORDdwEvent);intmain(intargc,char*argv[]){unsignedlongdestAddr;//目標(biāo)地址intnPort;//目標(biāo)端口//只有兩個(gè)參數(shù),即沒有給出端口號if(argc==2){destAddr=inet_addr(argv[1]);//獲取要連接的目標(biāo)主機(jī)的IP地址if(destAddr==INADDR_NONE){usage();〃不是合法的IP地址,則顯示程序的使用方法return-1;}nPort=23;//取得IP地址之后,默認(rèn)目標(biāo)端口號為23,即telnet端口else〃給出了目標(biāo)IP地址和目標(biāo)TCP端口號if(argc==3){destAddr=inet_addr(argv[1]);〃獲取要連接的目標(biāo)主機(jī)的IP地址if(destAddr==INADDR_NONE){usage();〃不是合法的IP地址,則提示程序的使用方法return-1;}nPort=atoi(argv[2]);//獲取目標(biāo)端口號if(nPort<=0||nPort>65535){usage();//端口非法,提示用戶本程序正確的使用方法return-1;}}else{//沒有給出參數(shù),則提示用戶本程序正確的使用方法usage();return-1;}〃以上步驟之后,獲得了目標(biāo)IP,和目標(biāo)TCP端口〃設(shè)置鉤子,捕獲控制臺程序的關(guān)閉消息if(!SetConsoleCtrlHandler(CtrlHandler,TRUE)){printf("SetConsoleCtrlHandler:%d\n”,GetLastError());return-1;}//初始化WinsockWSADATAwsaData;WSAStartup(WINSOCK_VERSION,&wsaData);//創(chuàng)建SOCK_STREAM類型的套接口g_sockClient=socket(AF_INET,SOCK_STREAM,0);//如果創(chuàng)建失敗,則處理if(g_sockClient==INVALID_SOCKET)(WSACleanup();return-1;}//定義sockaddr_in類型的結(jié)構(gòu)變量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);//關(guān)閉套接字g_sockClientprintf("Failed.(connect%d)\n",WSAGetLastError());WSACleanup();return-1;}elseprintf("Successfully.\n");//提示連接成功//定義83字節(jié)的數(shù)組,用于發(fā)送數(shù)據(jù)charbufa[83];//定義1000字節(jié)的數(shù)組,用于接收服務(wù)器返回的信息charbufb[1000];〃為了使用select檢查是否有數(shù)據(jù)到來,定義端口描述字集合fd_setreadSet;//定義select函數(shù)的超時(shí)值,timeval類型結(jié)構(gòu)體tvstructtimevaltv;intret,len;〃不斷的發(fā)送數(shù)據(jù)、接收數(shù)據(jù)while(1){//初始化發(fā)送數(shù)據(jù)緩存memset(bufa,0,83);〃讀取用戶輸入的一行信息到bufagets(bufa);//最多取輸入的前80個(gè)字符len=strlen(bufa);if(len>80)len=80;bufa[len]='\r';bufa[len+1]='\n';bufa[len+2]=0;〃發(fā)送數(shù)據(jù)ret=send(g_sockClient,bufa,strlen(bufa),0);//如果發(fā)送失敗,處理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;//毫秒最長等待時(shí)間為3秒+0毫秒〃調(diào)用select,有數(shù)據(jù)可讀或等待超時(shí)返回ret=select(0,&readSet,NULL,NULL,&tv);//如果調(diào)用select結(jié)果返回出錯(cuò)if(ret==SOCKET_ERROR)(printf("selcet:%d\n”,WSAGetLastError());break;}//如果select等待超時(shí):if(ret=0)(printf("Timeout,NoResponseFromServer.\n");break;}//如果g_sockClient在readSet里面,即g_sockClient這時(shí)候可讀if(FD_ISSET(g_sockClient,&readSet)){//準(zhǔn)備接收數(shù)據(jù)memset(bufb,0,1000);//接收數(shù)據(jù)ret=recv(g_sockClient,bufb,1000,0);//接收數(shù)據(jù)失敗,則提示if(ret==SOCKET_ERROR)(printf("recv:%d\n”,WSAGetLastError());break;}else{printf("%s",bufb);//接收成功,則顯示接收到的數(shù)據(jù)}}}//關(guān)閉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://當(dāng)前用戶注銷caseCTRL_SHUTDOWN_EVENT://系統(tǒng)關(guān)閉caseCTRL

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論