Корректен ли этот код?
От: Аноним  
Дата: 19.05.05 15:58
Оценка:
Люди, подскажите плз, правилен ли этот код?

SOCKET sock;
struct sockaddr_in sa;

WSAStartup(MAKEWORD(2, 0), &wsadata);

sock = socket(AF_INET, SOCK_STREAM, 0);

memset(&sa, 0, sizeof(sa));
sa.sin_family = AF_INET;
sa.sin_addr.s_addr = inet_addr("127.0.0.1");
sa.sin_port = htons(5555);

connect(sock, (struct sockaddr *)&sa, sizeof(sa));

Дело в том, что connect возвращает 10061. То же самое происходит и когда я указываю адрес соседнего компа в сети.
Вообще, требуется установить соединение и обмениваться данными с преобразователем интеррфейсов RS232/Ethernet MOXA NPort Express DE-311. Написано что устройство поддерживает TCP.
Означает ли это (что устройство поддерживает TCP), что для связи с ним мне нужно знать только его IP? Или нужно знать порт, который он использует?
Re: Корректен ли этот код?
От: MaximE Великобритания  
Дата: 19.05.05 16:56
Оценка:
wrote:

> Люди, подскажите плз, правилен ли этот код?

>
> SOCKET sock;
> struct sockaddr_in sa;
>
> WSAStartup(MAKEWORD(2, 0), &wsadata);
>
> sock = socket(AF_INET, SOCK_STREAM, 0);
>
> memset(&sa, 0, sizeof(sa));
> sa.sin_family = AF_INET;
> sa.sin_addr.s_addr = inet_addr("127.0.0.1");
> sa.sin_port = htons(5555);
>
> connect(sock, (struct sockaddr *)&sa, sizeof(sa));
>

Код сам по себе, скорее всего корректен.

> Дело в том, что connect возвращает 10061.


Какая символическая константа соответствует этому коду ошибки?

У меня виндозы нет под рукой, но скорее всего это ECONNREFUSED. Чтобы connect завершился успешно, необходимо, чтобы указанные адрес и порт обслуживались сервером.

> То же самое происходит и когда я указываю адрес соседнего компа в сети


То же самое — нужно коннектиться к работающему серверу.

> Вообще, требуется установить соединение и обмениваться данными с преобразователем интеррфейсов RS232/Ethernet MOXA NPort Express DE-311. Написано что устройство поддерживает TCP.

> Означает ли это (что устройство поддерживает TCP), что для связи с ним мне нужно знать только его IP? Или нужно знать порт, который он использует?

Нужно знать и IP адрес и порт. IP адрес задает адрес конкретной машины (хоста), порт — конкретный адрес на этом хосте.

--
Maxim Yegorushkin
Posted via RSDN NNTP Server 1.9
Re: Корректен ли этот код?
От: Michael Chelnokov Украина  
Дата: 19.05.05 19:53
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Люди, подскажите плз, правилен ли этот код?


Код корректен, но на 127.0.0.1:5555 никто не слушает, видимо.

А>Означает ли это (что устройство поддерживает TCP), что для связи с ним мне нужно знать только его IP? Или нужно знать порт, который он использует?


Порт обязательно.
Re[2]: Корректен ли этот код?
От: Аноним  
Дата: 20.05.05 06:29
Оценка:
ME>Какая символическая константа соответствует этому коду ошибки?

Коду 10061 соответствует константа WSAECONNREFUSED.

ME>Нужно знать и IP адрес и порт. IP адрес задает адрес конкретной машины (хоста), порт — конкретный адрес на этом хосте.



В таком случае не знаю как быть дальше: в документации на девайс, с которым я хочу законнектиться, равно как и в его конфигурационной программе, номер занимаемого им порта никак не фигурирует. Не могу же я пытаться тыкаться во все подряд порты... ((
Re[3]: Корректен ли этот код?
От: Protey Россия  
Дата: 20.05.05 07:03
Оценка:
Здравствуйте, Аноним, Вы писали:


А>В таком случае не знаю как быть дальше: в документации на девайс, с которым я хочу законнектиться, равно как и в его конфигурационной программе, номер занимаемого им порта никак не фигурирует. Не могу же я пытаться тыкаться во все подряд порты... ((


Насколько я понял и документации на МОХУ, проты не фигурируют, ибо у них есть драйвер, который работает на машинке и предоставляет СОМ порты программам.
Вы его заменить/эмулировать хотите?
Тогда 3 пути:
1 на тачке с утановленным драйвером и повязанным устройством набрать netstat -an , посмотреть, какие номера портов в линках на этот IP фигурируют
2 декомпил драйверов
3 Взять исходники драйверов для Nix систем, долго думать ...
Re: Корректен ли этот код?
От: КоД Россия  
Дата: 20.05.05 07:30
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Вообще, требуется установить соединение и обмениваться данными с преобразователем интеррфейсов RS232/Ethernet MOXA NPort Express DE-311. Написано что устройство поддерживает TCP.

А>Означает ли это (что устройство поддерживает TCP), что для связи с ним мне нужно знать только его IP? Или нужно знать порт, который он использует?

Прочитал описание на http://www.moxa.ru/html.prod/product/de311.html
Исходя из прочитанного, могу посоветовать попробовать подключиться на порт telnet (23). Вообще, опишите конкретней конфигурацию ситемы: что куда и как включено, как настроено и как предполагается это будет работать (то есть что предполагалось достичь), из этого станет понятней, какая из конфигураций, возможных на этом устройстве, используется, тогда и совет будет проще дать.
Денис.
Re[2]: Корректен ли этот код?
От: Аноним  
Дата: 20.05.05 08:31
Оценка:
Здравствуйте, КоД, Вы писали:

КоД>Прочитал описание на http://www.moxa.ru/html.prod/product/de311.html

Ага, я сегодня тоже это нашел и попробовал через telnet — получилось.


КоД>Исходя из прочитанного, могу посоветовать попробовать подключиться на порт telnet (23). Вообще, опишите конкретней конфигурацию ситемы: что куда и как включено, как настроено и как предполагается это будет работать (то есть что предполагалось достичь), из этого станет понятней, какая из конфигураций, возможных на этом устройстве, используется, тогда и совет будет проще дать.


Не знаю как Вы догадались, что надо использовать порт 23 (может он зарезервирован специально под telnet — я в этом вообще ничего не понимаю), а я подсмотрел номер пора в ethereal. И каково же было мое изумление, когда коннект состоялся.

Вообще, задача тревиальна — сделать доступным через сеть (локальную или глобальную) устройство, имеющее только последовательный интерфейс RS232. Устройство имеет свое собственное ПО для считывания с него информации на компьютер. Теперь это ПО надо адаптировать для работы по TCP и UDP.

Смутило то, что в поставляемом с преобразователем интерфейсов ПО я не нашел номеров используемых портов. На самом деле они есть — просто я плохо искал. Утешает лишь то, что не только я такой дурак — другие пользователи тоже не могут найти . Вообще наличие этих настроек я заметил именно в telnet. И уж только после этого решил убедиться, что их нет win программах, поставляемых в комплекте. А они там есть — просто по-умолчанию кнопка открытия этих настроек задисайблена, и я туда не совался ранее....

Итого: считывать данные по TCP уже получилось. С UDP пока разбираюсь с настройками адаптера — надеюсь все получится.

А теперь еще один вопрос: не знает ли кто-нить что за режим адаптера EthernetModem? Может это означает, что я каким-нибудь IExplorer'ом могу дозвониться до модема, подключенного преобразователю интерфейсов как на удаленный сервер и считывать данные используя сокеты??? Т.е. может тогда можно организовать доступ через модем, да такой, что считывание данных может вестись множеством программ через один канал связи(модем)??? ВОт это была бы роскошь, недоступная при работе с модемом напрямую (через AT команды). Но я с этим разберусь!
Re[3]: Корректен ли этот код?
От: КоД Россия  
Дата: 20.05.05 10:09
Оценка:
Здравствуйте, Аноним, Вы писали:

А> Не знаю как Вы догадались, что надо использовать порт 23 (может он зарезервирован специально под telnet — я в этом вообще ничего не понимаю), а я подсмотрел номер пора в ethereal. И каково же было мое изумление, когда коннект состоялся.

Так в доке вроде прямо так и написано: "к нему можно обращаться как к сетевому используя, например, консоль Telnet;". Для телнета по умолчанию порт — 23.

А>Вообще, задача тревиальна — сделать доступным через сеть (локальную или глобальную) устройство, имеющее только последовательный интерфейс RS232. Устройство имеет свое собственное ПО для считывания с него информации на компьютер. Теперь это ПО надо адаптировать для работы по TCP и UDP.

Имхо, это пункт 4 в доке, на которую я ссылался выше:
"...работу компьютера с устройством RS-232/422/485 в режиме Real COM Driver так, как будто это устройство подключено напрямую к последовательному порту компьютера; при этом на компьютере понадобится лишь установить драйвер удаленного COM-порта."


А>А теперь еще один вопрос: не знает ли кто-нить что за режим адаптера EthernetModem? Может это означает, что я каким-нибудь IExplorer'ом могу дозвониться до модема, подключенного преобразователю интерфейсов как на удаленный сервер и считывать данные используя сокеты??? Т.е. может тогда можно организовать доступ через модем, да такой, что считывание данных может вестись множеством программ через один канал связи(модем)??? ВОт это была бы роскошь, недоступная при работе с модемом напрямую (через AT команды). Но я с этим разберусь!

Тут я не копенгаген.
Денис.
Re[4]: Корректен ли этот код?
От: Аноним  
Дата: 20.05.05 10:27
Оценка:
Здравствуйте, КоД, Вы писали:

КоД>Так в доке вроде прямо так и написано: "к нему можно обращаться как к сетевому используя, например, консоль Telnet;". Для телнета по умолчанию порт — 23.


Об этом и речь! Я прочитал, что можно через телнет. Но откуда ж я должен знать, что для телнета по-умолчанию порт 23?

КоД>Имхо, это пункт 4 в доке, на которую я ссылался выше:

КоД>"...работу компьютера с устройством RS-232/422/485 в режиме Real COM Driver так, как будто это устройство подключено напрямую к последовательному порту компьютера; при этом на компьютере понадобится лишь установить драйвер удаленного COM-порта."
Именно! Но я писал, что надо адаптировать ПО так, чтобы оно работало не через СОМ-порт, а с сетевой картой (TCP, UDP). Это потому, что решение должно быть масштабируемо. А работа через виртуальные СОМ порты накладывает ограничение по количеству портов — не более 256. К сожалению, это режим может быть использован только по схеме одно конечное устройство — один виртуальный СОМ-порт.


Кстати, злодейская MOXA никак не хочет разговаривать со мной по UDP — "к нему можолчит как рыба об лед.... (
Re[5]: Корректен ли этот код?
От: КоД Россия  
Дата: 20.05.05 10:54
Оценка:
Здравствуйте, Аноним, Вы писали:

КоД>>Так в доке вроде прямо так и написано: "к нему можно обращаться как к сетевому используя, например, консоль Telnet;". Для телнета по умолчанию порт — 23.


А> Об этом и речь! Я прочитал, что можно через телнет. Но откуда ж я должен знать, что для телнета по-умолчанию порт 23?

Дык стандарт.

КоД>>Имхо, это пункт 4 в доке, на которую я ссылался выше:

КоД>>"...работу компьютера с устройством RS-232/422/485 в режиме Real COM Driver так, как будто это устройство подключено напрямую к последовательному порту компьютера; при этом на компьютере понадобится лишь установить драйвер удаленного COM-порта."
А>Именно! Но я писал, что надо адаптировать ПО так, чтобы оно работало не через СОМ-порт, а с сетевой картой (TCP, UDP). Это потому, что решение должно быть масштабируемо. А работа через виртуальные СОМ порты накладывает ограничение по количеству портов — не более 256. К сожалению, это режим может быть использован только по схеме одно конечное устройство — один виртуальный СОМ-порт.
А что понимается под масштабируемостью? Теоретически неограниченное кол-во устройств? И не совсем понимаю, что плохого в том, что одному конечному устройству соответствует один COM-порт? На одном компьютере хочется больше, чем 256 устройств, я правильно понимаю? Хочется что-то типа драйвера виртуального порта, без образования собственно порта, чтобы работал в качестве шлюза между компами и устройством (устройствами)?

А>Кстати, злодейская MOXA никак не хочет разговаривать со мной по UDP — "к нему можолчит как рыба об лед.... (

Настраивать её похоже надо.
Денис.
Re[6]: Корректен ли этот код?
От: Аноним  
Дата: 21.05.05 18:49
Оценка:
Здравствуйте, КоД, Вы писали:

КоД>А что понимается под масштабируемостью? Теоретически неограниченное кол-во устройств?

Совершенно верно

КоД>И не совсем понимаю, что плохого в том, что одному конечному устройству соответствует один COM-порт? На одном компьютере хочется больше, чем 256 устройств, я правильно понимаю? Хочется что-то типа драйвера виртуального порта, без образования собственно порта, чтобы работал в качестве шлюза между компами и устройством (устройствами)?

Примерно так. Но никакого драйвера виртуального СОМ-порта не создается. Создается новая сущность "Канал связи", которая реализует связь посредством сетевой карты, а не посредством такого устройства как СОМ-порт. При этом к адресации по собственно адресу конечного устройства добавляется адресация по IP адресу и порту. В остально логика существующей программы остается прежней. Всего лишь расширение коммуникационных возможностей программы так, чтобы "окучить" максимальное количество устройств.

КоД>Настраивать её похоже надо.

Я сегодня с ней разобрался! И была там одна неприятная вещь — это то, что я со своего хоста обращаюсь к адаптеру (со стороны ethernet), а он, подлец, отвечает не мне, обратившемуся к нему клиенту, а обращается по IP и порту, прописанному в его настройках. Не совсем это однозначно. Т.е. теоретически можно сделать так, что я делаю запрос в конечное устройство на какую-то информацию, а ответ отправляется не мне, заинтерсованному лицу, а куда-то в другое место.
Раньне я имел дело с гораздо более простым устройством. Так вот с ним таких проблем не было. Оно четко отдавало ответ тому, кто делал запрос. На тот же порт и по тому же ай-пи.
Re[7]: Корректен ли этот код?
От: КоД Россия  
Дата: 23.05.05 06:49
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, КоД, Вы писали:


КоД>>А что понимается под масштабируемостью? Теоретически неограниченное кол-во устройств?

А>Совершенно верно

КоД>>И не совсем понимаю, что плохого в том, что одному конечному устройству соответствует один COM-порт? На одном компьютере хочется больше, чем 256 устройств, я правильно понимаю? Хочется что-то типа драйвера виртуального порта, без образования собственно порта, чтобы работал в качестве шлюза между компами и устройством (устройствами)?

А>Примерно так. Но никакого драйвера виртуального СОМ-порта не создается. Создается новая сущность "Канал связи", которая реализует связь посредством сетевой карты, а не посредством такого устройства как СОМ-порт. При этом к адресации по собственно адресу конечного устройства добавляется адресация по IP адресу и порту. В остально логика существующей программы остается прежней. Всего лишь расширение коммуникационных возможностей программы так, чтобы "окучить" максимальное количество устройств.

Насколько я понял описание этой штуки, она будет неприменима в следующем случае — когда при работе требуется, чтобы было максимальное фиксированное время ответа. В этом случае эта штуковина неприменима, поскольку о гарантированном времени ответа в общем случае можно забыть, так как данные будут идти через сеть. Ну и не надо забывать о таком нюансе, что COM-порт допускал только одно подключение (то есть две программы его использовать не могли), как следствие сервер (железка на той стороне) скорее всего рассчитан на работу с одним клиентом; по сети же кол-во подключений может быть и больше одного. Ну а так там по-моему всё достаточно понятно.
Денис.
Re[8]: Корректен ли этот код?
От: Аноним  
Дата: 23.05.05 14:15
Оценка:
Здравствуйте, КоД, Вы писали:

КоД>Насколько я понял описание этой штуки, она будет неприменима в следующем случае — когда при работе требуется, чтобы было максимальное фиксированное время ответа. В этом случае эта штуковина неприменима, поскольку о гарантированном времени ответа в общем случае можно забыть, так как данные будут идти через сеть. Ну и не надо забывать о таком нюансе, что COM-порт допускал только одно подключение (то есть две программы его использовать не могли), как следствие сервер (железка на той стороне) скорее всего рассчитан на работу с одним клиентом; по сети же кол-во подключений может быть и больше одного. Ну а так там по-моему всё достаточно понятно.


Проблема "затянутого ответа" есть, но конкретно в нашем случае это абсолютно допустимо — для наших устройств обмены с мастером не приоритетны. На игнор со стороны прибора расчитано и компьютерное ПО, которое делает повторы запросов если необходимо.
Проблема нескольких клиентов, конечно, тоже имеет место, но это проблема конечного устройства, а не преобразователя интерфейсов. Идеальных решений почти не бывает. Конкретно для наших задач DE-311 сейчас подходит, хоть и оговорками конечно, что типа в один сеанс связи только один клиент. А вообще штучка эта оставила приятное впечатление. Дороговато только, разве что.
Re[9]: Корректен ли этот код?
От: КоД Россия  
Дата: 23.05.05 14:38
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Проблема нескольких клиентов, конечно, тоже имеет место, но это проблема конечного устройства, а не преобразователя интерфейсов. Идеальных решений почти не бывает. Конкретно для наших задач DE-311 сейчас подходит, хоть и оговорками конечно, что типа в один сеанс связи только один клиент. А вообще штучка эта оставила приятное впечатление. Дороговато только, разве что.


Из опыта работы с MOXA (платы RS485) у меня тоже остались позитивные впечатления. Цена — да, могло бы быть и подешевле. Но зато — качественно.
Денис.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.