Помогите пожалуйста. Подскажите почему когда я отправляю пакет серверу ответа от него я не получаю. Вот код:
| Код | #include <cstdlib> #include <iostream> #include <vector> #include<winsock2.h> #include <conio.h> #include <stdio.h> using namespace std; void TLV_Pack_UIN(unsigned short int Type,char *Data,vector<char>pck) { int i; unsigned short int tlv_type=htons(Type); int l=strlen(Data); unsigned short int tlv_lenght=htons(l); pck.push_back((char)tlv_type); pck.push_back((char)tlv_lenght); for(i=0;i<=9;i++) pck.push_back(Data[i]); } void TLV_Pack_Pass(unsigned short int Type,char*pwd,vector<char>pck) { int i; char pass_xor[]="\xF3\x26\x81\xC4\x39\x86\xDB\x92\x71" "\xA3\xB9\xE6\x53\x7A\x95\x7C"; for (int x = 0;x < strlen(pwd);x++) { pwd[x] = pwd[x]^pass_xor[x]; } unsigned short int tlv_type=htons(Type); int l=strlen(pwd); unsigned short int tlv_lenght=htons(l); pck.push_back((char)tlv_type); pck.push_back((char)tlv_lenght); for (i=0;i<=6;i++) pck.push_back(pwd[i]); } void TLV_Pack_2(unsigned short int Type,unsigned short int Data,vector<char>pck) { unsigned short int tlv_type=htons(Type); unsigned short int tlv_lenght=htons(2); unsigned short int tlv_data=htons(Data); pck.push_back((char)tlv_type); pck.push_back((char)tlv_lenght); pck.push_back((char)tlv_data); } void TLV_Pack_4(unsigned short int Type,unsigned long Data,vector<char>pck) { unsigned short int tlv_type=htons(Type); unsigned short int tlv_lenght=htons(4); unsigned short int tlv_data=htonl(Data); pck.push_back((char)tlv_type); pck.push_back((char)tlv_lenght); pck.push_back((char)tlv_data); } void Flap_HDR(char* ChID,unsigned short int SEQ,vector<char>pck) { char Sign[]="\x2A"; unsigned short int seq_num=htons(SEQ); unsigned short int lenght=htons(48); pck.push_back(Sign[0]); pck.push_back(ChID[0]); pck.push_back((char)seq_num); pck.push_back((char)lenght); }
int main(int argc, char *argv[]) { vector<char>pack; unsigned short int r; unsigned long data; char buf[1024]; int rc=NO_ERROR; int i; SOCKET NewSocket; SOCKADDR_IN rmaddr; WSADATA wsa; int err,error; char s[10]; i=0; err=WSAStartup(MAKEWORD(2,2), &wsa); if (err!=0) {printf("oshibka\n"); _getch(); } else {printf("biblioteka zagruzhena\n"); _getch(); } NewSocket = socket (AF_INET,SOCK_STREAM,IPPROTO_TCP); rmaddr.sin_addr.s_addr = inet_addr("205.188.7.244"); rmaddr.sin_family = AF_INET; rmaddr.sin_port = htons(5190); if(connect(NewSocket,(struct sockaddr *)&rmaddr,sizeof(rmaddr))==SOCKET_ERROR) { printf("oshibka"); _getch(); } else { printf("connect\n"); _getch(); } rc = recv(NewSocket, buf,6, 0); if(rc<=0) { printf("oshibka vizova"); closesocket(NewSocket); WSACleanup(); return EXIT_FAILURE; } else { printf("da"); } r=buf[3]; printf("%d",r); rc = recv(NewSocket, buf,r, 0); if(rc<=0) { printf("oshibka vizova"); closesocket(NewSocket); WSACleanup(); return EXIT_FAILURE; } else { printf("da"); } Flap_HDR("1",0,pack); data=htonl(1); pack.push_back((char)data); TLV_Pack_UIN(1,"495631328",pack); char pass[] = "Stanin"; TLV_Pack_Pass(2, pass, pack); unsigned short int tlv_type=htons(3); unsigned short int tlv_lenght=htons(10); char* Data; Data="ICQ Client"; pack.push_back((char)tlv_type); pack.push_back((char)tlv_lenght); for(int i=0;i<=10;i++) pack.push_back(Data[i]); tlv_type=htons(22); tlv_lenght=htons(2); char da[]="\x01\x0a"; pack.push_back((char)tlv_type); pack.push_back((char)tlv_lenght); for(i=0;i<=1;i++) pack.push_back(da[i]); TLV_Pack_2(23,6,pack); TLV_Pack_2(24,5,pack); TLV_Pack_2(25,0,pack); TLV_Pack_2(26,104,pack); TLV_Pack_4(20,30007,pack); tlv_type=htons(15); tlv_lenght=htons(2); char d[]="ru"; for(i=0;i<2;i++) pack.push_back(d[i]); tlv_type=htons(14); tlv_lenght=htons(2); char dd[]="ru"; for(i=0;i<2;i++) pack.push_back(dd[i]); error=send(NewSocket,(const char*)&pack,htons(48),0); if(SOCKET_ERROR==error) { printf("oshibka"); _getch(); closesocket(NewSocket); WSACleanup(); return EXIT_FAILURE; } else { printf("otpravil"); _getch(); } rc = recv(NewSocket, buf,6, 0); if(rc<=0) { printf("oshibka vizova"); closesocket(NewSocket); WSACleanup(); return EXIT_FAILURE; } else { printf("da"); } r=buf[3]; printf("%d",r); rc = recv(NewSocket, buf,r, 0); if(rc<=0) { printf("oshibka vizova"); closesocket(NewSocket); WSACleanup(); return EXIT_FAILURE; } else { printf("da"); _getch(); } closesocket(NewSocket); }
|
|