Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.08.2011, 13:47   #1
Pastor
Новичок
Джуниор
 
Регистрация: 04.08.2011
Сообщений: 3
По умолчанию Сокеты связь

Здравствуйте. Необходимо написать внешнюю компоненту для связи 1с и Терминала сбора данных (WiFi). Начал с того, что написал с помощью Winsock простенький сервер для проверки. И нарисовалась проблема - С терминала данные приходят, а на терминал с сервера нет. Написал такой же элементарный клиент на компе - с ним все нормально, прием-передача с сервером работает. Скачал для проверки простенький эхо-сервер, с ним терминал работает! Не пойму в чем проблема. Код сервера прилагается.
Вложения
Тип файла: txt серв.txt (2.0 Кб, 135 просмотров)
Pastor вне форума Ответить с цитированием
Старый 04.08.2011, 13:53   #2
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

В приведенном коде куча грубейших ошибок.
mss вне форума Ответить с цитированием
Старый 04.08.2011, 14:05   #3
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> а на терминал с сервера нет

если программа выводит:

Цитата:
Otpravleno: 5
значит данные таки доходят.

> куча грубейших ошибок

я там увидел только скользкий момент с передачей сокета:

Код:
s := vSocket;
Если быстро будет созданно несколько подключений, будет беда. А так вроде код живой.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 04.08.2011, 14:22   #4
Pastor
Новичок
Джуниор
 
Регистрация: 04.08.2011
Сообщений: 3
По умолчанию

Код не для работы, просто как проверка.
Цитата:
Цитата:
Otpravleno: 5
значит данные таки доходят.
Вот они "как-бы" доходят. На терминале код ошибки расшифровывается как no data received in buffer. Т.е. терминал данные пришедшие не видит.
Pastor вне форума Ответить с цитированием
Старый 04.08.2011, 14:23   #5
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Код-то тестовый ..
Что будет если на первый взгляд "живой" код будет употреблен в "боевое" применение ?
А будет большая задница)
И не только по причине "скользкий момент с передачей сокета", а и еще по массе других весьма важных причин.
mss вне форума Ответить с цитированием
Старый 04.08.2011, 14:32   #6
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> терминал данные пришедшие не видит

скорее видит, но не воспринимает байты 'Hello' как правильную команду протокола и закрывает сокет от греха подальше.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 04.08.2011, 14:38   #7
Pastor
Новичок
Джуниор
 
Регистрация: 04.08.2011
Сообщений: 3
По умолчанию

Цитата:
скорее видит, но не воспринимает байты 'Hello' как правильную команду протокола и закрывает сокет от греха подальше.
Сокет не закрывает. Можно дальше получать с него данные. Какие могут быть причины того, что терминал не воспринимает данные? Какого-то своего протокола у него нет. Я скачал с инета первый попавшийся сервер, с ним обмен был нормальный.
Pastor вне форума Ответить с цитированием
Старый 04.08.2011, 14:59   #8
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
своего протокола у него нет
Это что ж получается, с ним можно "поговорить" не только о собранных им данных, но и просто "за жизнь" ?

Какой-то стрёмный терминал)
mss вне форума Ответить с цитированием
Старый 04.08.2011, 16:23   #9
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

> стрёмный терминал

а судя по его любви к эхо-серверам, ещё и страдающий нарциссизмом в тяжёлой форме )

Реально, может посылать ему не 'Hello', а те байты, которые приходят из терминала, как это делает "первый попавшийся сервер"? Если сокет не закрывается, и данные уходят (snd > 0), значит терминал их принимает (если бы он их не принимал, он бы не высылал подтверждения о приёме и snd было бы <= 0, имхо). Приведите лог программы после общения с терминалом, что ли.
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 04.08.2011, 16:31   #10
mss
Заблокирован
 
Регистрация: 27.05.2010
Сообщений: 1,099
По умолчанию

Цитата:
Если сокет не закрывается, и данные уходят (snd > 0), значит терминал их принимает
Не факт.
После создания гнезда алгоритм Нагеля по дифолту включен, так что совсем не исключено что отправляемые данные буферизуются и будут фактичесик выплюнуты "всем колхозом" чуть позже.

А то что терминал что-то там постоянно присылает - так может ему просто поговорить хочется, хоть собеседник его и молчит упорно)
mss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сокеты в C++ MiRiN Общие вопросы C/C++ 5 06.05.2010 16:53
C#, сокеты Namolem Помощь студентам 0 06.05.2010 10:53
C#, сокеты Namolem Помощь студентам 0 06.05.2010 03:36
Сокеты Pelengeist Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 19.11.2009 11:09
Сокеты Pavelok Работа с сетью в Delphi 3 16.09.2009 16:57