MMP протокол формирование пакета

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by _nic, 18 Oct 2009.

  1. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Пытаюсь понять как работает.Пока ничего невыходит.Абсолютно непонятно как пакеты формировать :( Пробывал так
    Code:
    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.Как же надо составлять эти долбаные пакеты?
     
  2. Gar|k

    Gar|k Moderator

    Joined:
    20 Mar 2009
    Messages:
    1,166
    Likes Received:
    266
    Reputations:
    82
    /thread133090.html
     
    _________________________
  3. _nic

    _nic Elder - Старейшина

    Joined:
    5 May 2006
    Messages:
    651
    Likes Received:
    54
    Reputations:
    3
    Я ассемблер непонимаю :(