一个简单的tcp客户端实例_.docVIP

  • 1
  • 0
  • 约4.03千字
  • 约 10页
  • 2016-12-30 发布于重庆
  • 举报
# pragma comment(lib, ws2_32.lib) #include STDIO.H #include WINSOCK2.H SOCKET g_sockClient = INVALID_SOCKET; //提示程序的使用方法 void usage(); //捕获关闭信息 BOOL WINAPI CtrlHandler(DWORD dwEvent); int main(int argc, char* argv[]) { unsigned long destAddr; //目标地址 int nPort; //目标端口 //只有两个参数,即没有给出端口号 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; } //初始化Winsock WSADATA wsaData; WSAStartup(WINSOCK_VERSION, wsaData); //创建SOCK_STREAM类型的套接口 g_sockClient = socket(AF_INET, SOCK_STREAM, 0); //如果创建失败,则处理 if (g_sockClient == INVALID_SOCKET){ WSACleanup(); return -1; } //定义sockaddr_in类型的结构变量to struct sockaddr_in to; //初始化to memset(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, (struct sockaddr *) to, sizeof(to)) == SOCKET_ERROR){ if (g_sockClient != INVALID_SOCKET) closesocket(g_sockClient); //关闭套接字g_sockClient printf(Failed. (connect %d) \n, WSAGetLastError()); WSACleanup(); return -1; } else printf(Successfully. \n);//提示连接成功 //定义83字节的数组,用于发送数据 char bufa[83]; //定义1000字节的数组,用于接收服务器返回的信息 char

文档评论(0)

1亿VIP精品文档

相关文档