_nic
18.10.2009, 23:06
Пытаюсь понять как работает.Пока ничего невыходит.Абсолютно непонятно как пакеты формировать :( Пробывал так
int _tmain(int argc, _TCHAR* argv[])
{
SOCKET s;SOCKADDR_IN adr;WSADATA wsd;
WSAStartup(MAKEWORD(2,0),&wsd);
hostent *h;
char Ip[1024];
char *datain=new char[1024*1024];
memset(datain,NULL,1024*1024);
h=gethostbyname("mrim.mail.ru");
sprintf(Ip,"%d.%d.%d.%d",(unsigned char)h->h_addr_list[0][0],(unsigned char)h->h_addr_list[0][1],(unsigned char)h->h_addr_list[0][2],(unsigned char)h->h_addr_list[0][3]);
adr.sin_family=AF_INET;
adr.sin_addr.s_addr =inet_addr(Ip);
adr.sin_port = htons(2042);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
connect( s,(sockaddr *)&adr, sizeof(adr));
recv(s,datain,1024*1024,0);
closesocket(s);
int mraport;
char *buf=new char[1024];
strtok(datain,"\n");
strcpy(buf,strstr(datain,":"));
buf+=1;
mraport=atoi(buf);
buf-=1;
delete []buf;
strtok(datain,":");
strcpy(Ip,datain);
memset(datain,NULL,strlen(datain)+1);
adr.sin_family=AF_INET;
adr.sin_addr.s_addr =inet_addr(Ip);
adr.sin_port = htons(mraport);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
connect( s,(sockaddr *)&adr, sizeof(adr));
mrim_packet_header_t data;
mrim_packet_header_t _data;
mrim_connection_params_t params;
data.dlen=0;
data.msg=MRIM_CS_HELLO;
data.magic=PROTO_VERSION;
data.seq=0;
data.magic=CS_MAGIC;
data.fromport=mraport;
data.from=0;
cout<<send(s,(char*)&data,sizeof(data),0)<<endl;
int received=0;WSASetLastError(0);
received=recv(s,(char*)&_data,sizeof(_data),0);
cout<<received<<_data.seq<<endl;
printf("%d",WSAGetLastError());
closesocket(s);
getch();
WSACleanup();
return 0;
}
А ответ не бубум .То есть recv возвращяет 0.Как же надо составлять эти долбаные пакеты?
int _tmain(int argc, _TCHAR* argv[])
{
SOCKET s;SOCKADDR_IN adr;WSADATA wsd;
WSAStartup(MAKEWORD(2,0),&wsd);
hostent *h;
char Ip[1024];
char *datain=new char[1024*1024];
memset(datain,NULL,1024*1024);
h=gethostbyname("mrim.mail.ru");
sprintf(Ip,"%d.%d.%d.%d",(unsigned char)h->h_addr_list[0][0],(unsigned char)h->h_addr_list[0][1],(unsigned char)h->h_addr_list[0][2],(unsigned char)h->h_addr_list[0][3]);
adr.sin_family=AF_INET;
adr.sin_addr.s_addr =inet_addr(Ip);
adr.sin_port = htons(2042);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
connect( s,(sockaddr *)&adr, sizeof(adr));
recv(s,datain,1024*1024,0);
closesocket(s);
int mraport;
char *buf=new char[1024];
strtok(datain,"\n");
strcpy(buf,strstr(datain,":"));
buf+=1;
mraport=atoi(buf);
buf-=1;
delete []buf;
strtok(datain,":");
strcpy(Ip,datain);
memset(datain,NULL,strlen(datain)+1);
adr.sin_family=AF_INET;
adr.sin_addr.s_addr =inet_addr(Ip);
adr.sin_port = htons(mraport);
s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
connect( s,(sockaddr *)&adr, sizeof(adr));
mrim_packet_header_t data;
mrim_packet_header_t _data;
mrim_connection_params_t params;
data.dlen=0;
data.msg=MRIM_CS_HELLO;
data.magic=PROTO_VERSION;
data.seq=0;
data.magic=CS_MAGIC;
data.fromport=mraport;
data.from=0;
cout<<send(s,(char*)&data,sizeof(data),0)<<endl;
int received=0;WSASetLastError(0);
received=recv(s,(char*)&_data,sizeof(_data),0);
cout<<received<<_data.seq<<endl;
printf("%d",WSAGetLastError());
closesocket(s);
getch();
WSACleanup();
return 0;
}
А ответ не бубум .То есть recv возвращяет 0.Как же надо составлять эти долбаные пакеты?