Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Непонятный глюк с сокетом  (Прочитано 20212 раз)
0 Пользователей и 1 Гость смотрят эту тему.
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« : 13-09-2004 08:04 » 

Есть функция :
Код:
void CViewText::OnSend(SOCKET s, LPCTSTR char_to_send)
{
USES_CONVERSION;
int buf_len = sizeof(T2CA(char_to_send));
int dt_bt;
if((dt_bt = send(s, T2CA(char_to_send), buf_len, 0)) <= 0) {
int error = WSAGetLastError();
::_MessageBoxFormat(NULL, TEXT("Error!"), MB_OK, TEXT("send error: %d; socket: %d"), error, s);
closesocket(mysocket);
WSACleanup();
}else{
//AfxMessageBox (_T("Data sent!"), MB_OK | MB_ICONINFORMATION);
}
}
на терминале вижу получаемые символы, но почему то после каждого символа добавляется знак @  :l_smile:
« Последнее редактирование: 01-12-2007 14:21 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 13-09-2004 08:29 » 

MOPO3, может быть, у тебя собрано как Unicode.  В таком случае каждый символ ASCII представляется в виде двух байт: байта 0 и собственно символа. Возможно, именно этот ноль отображается как @
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #2 : 13-09-2004 08:32 » 

Цитата: npak
MOPO3, может быть, у тебя собрано как Unicode.  В таком случае каждый символ ASCII представляется в виде двух байт: байта 0 и собственно символа. Возможно, именно этот ноль отображается как @


в каком порядке идёт этот байт 0 ? У меня получается на терминале запись вида : b@l@a@b@l@a@b@l@a@, т.е. сначала символ а затем уже собака Жаль
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 13-09-2004 08:53 » 

MOPO3, в 16-байтном виде 0 в старшем байте.  На х86 в памяти младший байт идёт первым, старший вторым.  Поэтому при отправке сначала уходит ASCII код, следом за ним 0.
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #4 : 13-09-2004 09:05 » 

npak, твоя правда Улыбаюсь
Переписал
Код:
 
send(s, T2CA(char_to_send), buf_len, 0)
на вот это
Код:
send(s, T2CA(char_to_send), 1, 0)
и всё стало нормально работать Улыбаюсь
« Последнее редактирование: 01-12-2007 14:22 от Алексей1153++ » Записан

MCP, MCAD, MCTS:Win, MCTS:Web
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 13-09-2004 09:17 » 

Отлично
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #6 : 14-09-2004 04:37 » 

npak, совсем забыл Улыбаюсь держи заслуженый плюсик за постоянную помощь и главное за толковые разъяснения  Ага
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
npak
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #7 : 14-09-2004 10:25 » 

MOPO3, спасибо Улыбаюсь
Записан

UniTesK -- индустриальная технология надежного тестирования.

http://www.unitesk.com/ru/
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #8 : 28-09-2004 07:08 » 

Продолжу эту тему чтобы новую не создавать.
Использую ту же функцию что описана выше. При конекте к сокету на сервере, получаю сообщение что коннект установился, но далее при попытке послать данные, начинаю получать ошибку 10053, т.е. :
Код:
An established connection was aborted by the software in your host machine.

Что то как-то не пойму что за мигня у меня на машине отрубает коннект Жаль
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #9 : 28-09-2004 07:44 » 

MOPO3, сколько времени занимает время от коннекта до попытки послать???

Стоят ли файрвол и т.п. программки?
Записан

А птичку нашу прошу не обижать!!!
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #10 : 28-09-2004 07:52 » 

Гром, от контакта до посылки проходит около 5-10 секунд

Схема такая :
к моему ком порту физическому подрублен девайс. Этот девайс имеет выход на TCP/IP
моя прога (подрублена к виртуальному кому) конектится к TCP/IP  порту на этом девайсе
далее, если я получаю на свой виртуальный ком данные, я их обрабатываю и посылаю на TCP/IP  порт этому девайсу

Конект проходит нормально, а вот дальше начинается Жаль То проходит всё как по маслу, то получаю описаные выше ошибки Жаль

никаких файрволов на компе у меня не стоит
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #11 : 28-09-2004 07:59 » 

Предупреждать надо Улыбаюсь (С)
Ты ж сразу говори, что есть девайс и ты сокет на ком порте открываешь...

БЕз точного знания девайса вряд-ли что-то скажу - на ум приходит Тайм аут... от открытия до закрытия - проверяй...
Записан

А птичку нашу прошу не обижать!!!
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #12 : 28-09-2004 08:03 » 

Гром,  Улыбаюсь я не открываю сокет на ком порту Улыбаюсь Етот девайс имеет свой  TCP/IP сервер Улыбаюсь Вся реализация у него внутри Улыбаюсь всё что он делает - это : если получил по сокету, гонит в ком и наоборот. Я просто конекчусь к нему как к  TCP/IP серверу Улыбаюсь

Ок, попробую с тайм аутами побавиться Улыбаюсь
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #13 : 28-09-2004 08:24 » 

Ага понял.

Но у тебя в таком случае на COM должен бежать протокол общения с сервером девайса, ведь должен ты ему указать что это за операция и какой пакет ты ему послал...

Кстати - это случайно не iChip??? Похоже черт подери...
Записан

А птичку нашу прошу не обижать!!!
Diletant
Помогающий

de
Offline Offline

« Ответ #14 : 28-09-2004 08:31 » 

Вполне может быть, что срабатывает Timeоut от TCP. Можно попытаться по получении данных закрыть соединение, затем после обработки приконнектиться снова и передать данные. Или обмен данными должен осуществляться в одну сессию? Тогда нужно слать какую-нибудь поддерживающую контакт лабуду типа NOP.
 Известно сколько соединений одновременно поддерживает сервер?
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #15 : 28-09-2004 08:42 » 

Гром, не, не iChip Улыбаюсь Железку эту спаяли у нас(на рабитовском процессоре пашет), и успешно продают Улыбаюсь
Похоже всё таки что дело в том, что сокет по таймауту закрывается. Буду дальше копать. Сенкс Улыбаюсь
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #16 : 28-09-2004 08:45 » 

Diletant, попробую как ты говориш, но как-то это некрасиво получается  Ага  получил данные, закрыл соединение, обработал, открыл, послал...  ИМХО думаю что таким образом замедлится скорость выполнения всех операций, а мне впереди светит ещё и увеличивать скорость.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #17 : 28-09-2004 10:53 » 

MOPO3, обязательно замедлится...

Проверяй установки time-out
Записан

А птичку нашу прошу не обижать!!!
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #18 : 28-09-2004 11:15 » 

Гром, так и было Жаль по таймауту обрубает коннект. Сделал что если при попытке послать в сокет данные соединение уже закрыто, то тогда делаю реконект.
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #19 : 28-09-2004 12:37 » 

MOPO3, это может подтормаживать тоже и не мало...
Попробуй подгадать установку тайм-аута на закрытие сокета так, что бы ты в 90% случаев успевал бы...
Это можно статиситчески замерить сколько тебе надо при достаточно большой выборке....
Записан

А птичку нашу прошу не обижать!!!
Diletant
Помогающий

de
Offline Offline

« Ответ #20 : 28-09-2004 16:16 » 

Так ведь таймаут соединения чаще всего сервер определяет. А если пауза между получением данных и их отправкой  составляет пять секунд, то тормоза на повторное соединение не сильно заметны будут.
Записан
MOPO3
Ай да дэдушка! Вах...
Команда клуба

lt
Offline Offline
Пол: Мужской
Холадна аднака!


WWW
« Ответ #21 : 29-09-2004 05:24 » 

Гром, хорошо, попробую что нить сделать, или попрошу техников чтоб перепрограмили железку на больший таймаут

Diletant, в принципе да, не сильно. Но с таким подходом, мне нужно дополнительный код писать, потому что при тестах обнаружил вот что :
1. приостановился поток данных, по таймауту отрубается сокет
2. далее идёт следующий поток данных, делаем реконнект
3. в результате, в зависимости от скорости реконекта, теряется как минимум один первый символ Жаль
Записан

MCP, MCAD, MCTS:Win, MCTS:Web
Mad
Гость
« Ответ #22 : 16-10-2004 13:22 » 

MOPO3, Выясни что железяка делает с OOB пакетами. и если просто игнорирует, то шли их с половиным интервалом timeoutа (или вообще, если точные таймауи не известен,постоянно Улыбаюсь )
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines