sock[1]=socket(AF_INET,SOCK_STREAM,IPPROTO_IP); if(sock[1]==INVALID_SOCKET) { printf("\nsocket() failed:%d",GetLastError()); __leave; } //fill struct Target.sin_family=AF_INET; Target.sin_addr.s_addr=inet_addr(TargetIP); Target.sin_port=htons(TargetPort); Master.sin_family=AF_INET; Master.sin_addr.s_addr=inet_addr(AgentMasterIP); Master.sin_port=htons(AgentMasterPort); //connect to AgentMaster if(connect(sock[0],(struct sockaddr *)&Master,sizeof(Master))==SOCKET_ERROR) { //连接失败后,等待一会儿再连 printf("\nconnect() to master failed:%d",GetLastError()); closesocket(sock[0]); closesocket(sock[1]); Sleep(5000); continue; } printf("\nconnect to %s %d success!",AgentMasterIP,AgentMasterPort); //connect to target if(connect(sock[1],(struct sockaddr *)&Target,sizeof(Target))==SOCKET_ERROR) { printf("\nconnect() to target failed:%d",GetLastError()); __leave; } printf("\nconnect to %s %d success!",TargetIP,TargetPort); //创建两个线程进行数据转发 hThreadC2T=CreateThread(NULL,0,TCPDataC2T,(LPVOID)sock,0,&dwThreadID); hThreadT2C=CreateThread(NULL,0,TCPDataT2C,(LPVOID)sock,0,&dwThreadID); //等待两个线程结束 WaitForSingleObject(hThreadC2T,INFINITE); CloseHandle(hThreadC2T); CloseHandle(hThreadT2C); closesocket(sock[0]); closesocket(sock[1]); }//end of while }//end of try __finally { if(sock[0]!=INVALID_SOCKET) closesocket(sock[0]); if(sock[1]!=INVALID_SOCKET) closesocket(sock[1]); if(hThreadC2T!=NULL) CloseHandle(hThreadC2T); if(hThreadT2C!=NULL) CloseHandle(hThreadT2上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] ... 下一页 >> |