Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Пропадает пакет

16K
02 октября 2006 года
aragaer
25 / / 28.07.2006
Имеется программа, которая умеет кидать в сокет пакеты. От меня требуется эти пакеты отлавливать. Известно, что сразу после запуска программа шлет два пакета - в первом волшебное слово, а во втором куча инфы. Программа, написанная на С++ с использованием winsocket'ов все нормально ловит. А на C# с дотнетовскими сокетами - второй пропадает.

С#:
Код:
my_socket.Poll(-1, SelectMode.SelectRead);
int len = my_socket.Available;
byte[] tmpBuf;

tmpBuf = new byte[cb_length]; // 16 байт, там столько и должно быть
my_socket.Receive(tmpBuf, cb_length, SocketFlags.None);
cb = parse_cb(tmpBuf); // разбираем структуру
           
if (cb.MN != Magic())
    return;
       
if (cb.command == 1) { // Getting all Library
    my_socket.Poll(1000, SelectMode.SelectRead); // проблемное место
    len = my_socket.Available;
    tmpBuf = new byte[len];
    my_socket.Receive(tmpBuf);
    lib = ParseLib(tmpBuf);
    return;
}


С++:
Код:
int ret;
unsigned long len;
char* tmpBuf;

fd_set my_set;
my_set.fd_count = 1;
my_set.fd_array[0] = socket;
select(1, &my_set, 0, 0, 0);

ret = ioctlsocket(socket, FIONREAD, &len);
printf("Socket contains %d bytes of data\n", len);

tmpBuf = new char[16];
recv(socket, tmpBuf, 16, 0);
memcpy(&cb, tmpBuf, 16);
if ( cb.MN != MAGIC )
    return;
if ( cb.command == 1 ) { // Getting all Library
    select(1, &my_set, 0, 0, 0);

    ret = ioctlsocket(socket, FIONREAD, &len);
    tmpBuf = new char[len];
    recv(socket, tmpBuf, len, 0);
    ParsLib( tmpBuf );
    return;
}


Разница между этими двумя кусками кода: в первом, даже при бесконечном ожидании, не приходит второй пакет (если руками докинуть третий, то третий придет). В чем может быть проблема?
273
05 октября 2006 года
3A3-968M
1.2K / / 22.12.2005
Какой протокол использует сокет??
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог