Модераторы: feodorv
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> реализация UDP associate в Socks5 сервере, Нужна помошь 
:(
    Опции темы
Mihа
Дата 17.10.2008, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 17.10.2008

Репутация: нет
Всего: нет



Прошу помочь с UDP в сокс кто может. Вообщем написал сервер.Метод Connect работает,а вот c UDP что-то не ладно((. По TCP принимается запрос от клиента, отсылается ответ и  далее идёт обмен по UDP. Даже данные от клиента к конечному серверу отсылаются и наоборот, но клиент как-будто не воспринимает пришедшие к нему данные. Тестировал при помощи  cs1.6 и соксификатора permeo.Вот часть кода, где начинается непрсредственно обмен по UDP:
Код

  setsockopt(sock,IPPROTO_TCP,TCP_NODELAY,(char*)&optval,sizeof(bool));
  while(true){
  FD_ZERO(&fdset);
  FD_SET(UDPClient,&fdset);
  FD_SET(UDPServer,&fdset);
  FD_SET(sock,&fdset);
  if (select(0,&fdset,NULL,NULL,NULL) < 0 ) break;
  if (FD_ISSET(sock,&fdset)){
   ret=recv(sock,Buff,sizeof(Buff),0);
   if (ret<=0){
    cout << "UDP session closed" << endl;
    return 0;
   } else cout << "UDP session start" << endl<<"UDPsock: "<<Buff<<endl;
   continue;
  } 
  if (FD_ISSET(UDPClient,&fdset)){
   ZeroMemory(&Buff,sizeof(Buff));
   i=sizeof(bndclient);
   ret=recvfrom(UDPClient,Buff,sizeof(Buff),0,(sockaddr*)&bndclient,&i);
   
   if (ret<=0) break;
   if (Buff[2]==0) cout << "Polnii packet"<<endl; else {cout<<"Fragment"<<endl; continue;} 
   switch (Buff[3]){
    case 0x01:
     w1=MAKEWORD(Buff[4],Buff[5]); w2=MAKEWORD(Buff[6],Buff[7]);
     IP2=MAKELONG(w1,w2);
     int port1;
     port1=MAKEWORD(Buff[8],Buff[9]);
     for (i=0;i<ret;i++)
      Buff[i]=Buff[i+10];
     ret-=10;
     ZeroMemory(&servaddr,sizeof(servaddr));
     servaddr.sin_family=AF_INET;
     servaddr.sin_addr.s_addr=IP2;
     servaddr.sin_port=port1;
     cout <<"IP v4: "<< inet_ntoa(servaddr.sin_addr) <<" port: "<<htons(port1)<<endl;
     break;
    case 0x03:
     cout <<"Domain name"<< endl;
   }   
   ret=sendto(UDPServer,Buff,ret,0,(sockaddr*)&servaddr,sizeof(servaddr));
   if (ret==SOCKET_ERROR)
    MessageBoxA(0,"UDP_ToServ","Error",0); 
   cout << "UDPClientToServ: " << Buff<<" size: "<< ret << endl;
   continue;
  }
  if (FD_ISSET(UDPServer,&fdset)){
   i=sizeof(servaddr);
   ret=recvfrom(UDPServer,Buff,sizeof(Buff),0,(sockaddr*)&servaddr,&i);
   if (ret<=0) break;
   for (i=ret-1;i>=0;i--)
    Buff[i+10]=Buff[i];
   w1=HIWORD(IP); w2=LOWORD(IP);
   Buff[0]=0x00; Buff[1]=0x00; Buff[2]=0x00; Buff[3]=0x01;
   *((unsigned long*)(Buff+4))=bndclient.sin_addr.s_addr;
   *((unsigned short*)(Buff+8))=bndclient.sin_port;
   ret=sendto(UDPClient,Buff,ret+10,0,(sockaddr*)&bndclient,sizeof(bndclient));
   cout << "UDPServerToClient: " <<"size: "<<ret<<" Addr: "<< inet_ntoa(bndclient.sin_addr)<<" Port "<<htons(bndclient.sin_port)<<endl;
   continue;
  } 
 }


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0498 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.