recv получает "левые данные"

Тема в разделе "WASM.NETWORKS", создана пользователем XshStasX, 13 фев 2010.

  1. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    есть два процесса(сервер и клиент)
    так вот когда клиент отсылает данные через send они как бы принимаются но там все байты 0
    recv возвращает что все хорошо
    GetLastError() тоже. но данные посланы через send не 0!!
    эта функ на стороне сервера работает (запускается для каждого клиента)
    Код (Text):
    1. void cl(void*p){
    2.     ClientThread *m=(ClientThread *)p;
    3.     char buf[255]={0};
    4.     HANDLE h[1]={WSACreateEvent()};
    5.  
    6.     int err=WSAEventSelect(m->Socket,h,FD_WRITE);
    7.  
    8.      err=GetLastError();
    9.  
    10.     SockReader R(m->Socket);
    11.  
    12.     SockWriter W(m->Socket);
    13.     printf ("Client Thread is run\n");
    14.  
    15. int b=1;
    16.  
    17. while (b)
    18.  
    19.  switch(WSAWaitForMultipleEvents(1,h,false,WSA_INFINITE,false)){
    20.  
    21.   case(WSA_WAIT_EVENT_0):{
    22.  
    23.        recv(m->Socket,&buf[0],1,MSG_OOB);
    24.  
    25.        if (buf[0]==0){ b=0;break;};
    26.  
    27.        recv(m->Socket,&buf[1],(int)buf[0],MSG_OOB);
    28.  
    29.        send(m->Socket,&buf[0],(int)buf[0]+1,MSG_OOB);
    30.  
    31.        break;
    32.  
    33.     };
    34.  
    35. }
    36.  
    37. WSACloseEvent(h);
    38.  
    39. _endthread();
    40.  
    41. };
    а этой функ пишет клиент серверу
    Код (Text):
    1. int SockWriter::Write(char *buf,int len,bool iswait){
    2.  
    3.  int s=len;
    4.  
    5. for ( ;len>0;){
    6.  
    7.     len-=send(Socket,buf,len,MSG_OOB);
    8.  
    9.     if (iswait==false) break;
    10.  
    11.  };
    12.  
    13. return s-len;
    14.  
    15. };
    клиент и сервер в аттаче.
     
  2. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    [ img][/img ]

    забавно :)
     
  3. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991

    а как насчёт вопроса ?
     
  4. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    что у всех работает?
    задание сервера все что получает обратно отсылать(это все в процедуре cl находится).
    а получает он 0(
     
  5. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    запроста может блочиться каким нить авером или фаером
     
  6. stmia

    stmia New Member

    Публикаций:
    0
    Регистрация:
    29 июн 2009
    Сообщения:
    35
    неплохо бы проверять коды возврата recv/send и если оно меньше нуля смотреть на GetLastError().
    у вас запросто может быть такая ситуация что recv() вернула ошибку - следовательно в буфере осталось
    то что там было при инициализации (скорее всего нули) - send тоже вернул ошибку и ничего не послал назад,
    а вы про это так и не узнали. дальше не смотрела.
     
  7. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    Та капец recv возвращает 1, GetLastError 0.
    Да и вообще у меня винда в qemu. на ней нет нет антивирусов и и подобного.
    recv именно 0 пишет (((
     
  8. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    И именно 1 возвращает, если ещё раз вызвать recv() то GetLastError возвратит 10035, а recv () -1.
    Сейчас попробую ещё использовать после recv WSAGetOverlappedResult() может чем то поможет.
     
  9. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    пробивал не на виртуале. тоже самое(
     
  10. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    неужели у всех работает ?(((((((((((((
     
  11. XshStasX

    XshStasX New Member

    Публикаций:
    0
    Регистрация:
    9 авг 2008
    Сообщения:
    991
    все заработало!!!
    надо было везде MSG_OOB заменить на 0