Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» Передача данных между компьютерами.

Автор: mc
Дата сообщения: 05.01.2004 05:32
Всем привет.
Люди, спасите погибающего. Щас как известно идёт сессия и мне нужно решить задачу к 20 числу, иначе сессия будет завалена и возможно даже выгонят из института. Ну не будем о плохом. Прога должна сохранить данные в файл и заодно передать эти данные на др. компьютер. Данные представляют собой просто числа/текст. Компы подсоеденены к локальной сети. Второй компьютер должен получить передаваемые данные и выдать результат на экран. Вопрос - как передавать данные между компьютерами.
программа должна быть сделана на borland c++ по win.
Буду очень признателен за помощь.
Автор: ShIvADeSt
Дата сообщения: 05.01.2004 07:46
через сокеты самый простой способ. Где то есть у меня реализация на С. одна прога клиент вторая сервер. Один другому мессаги шлет. Если надо давай мыло - разбирайся. А вообще народ поможет, чтобы не выгнали. Надо только зараннее писать
Автор: IntenT
Дата сообщения: 05.01.2004 12:08
mc
Есть там пример такой - demos/internet/chat
разбирайся
Автор: Arion
Дата сообщения: 05.01.2004 14:49
Другой способ - используя именованные каналы (Named Pipes).
http://www.oswald.h1.ru/pr/pipe.html
Автор: mc
Дата сообщения: 05.01.2004 22:57
>ShIvADeSt
Спасибо за поддержку.

Вообще сеть мы не проходили на лекциях, а в скачанных книгах/статьях вообще нет ничего подобного. Мне бы хоть немного информации какими операторами нужно воспользоваться. Буду блогадарен, если скините немного инфы/кода мне на мыло - mcm@mail.ru

>Arion
Спасибо за ссылку, но в этой статье написано: "Ради справедливости необходимо правда сказать, что серверная часть именованного канала не может быть открыта на машине с операционной системой Win9X, хотя клиентская - может".
А у нас в институте стоят именно win9x.
Автор: Arion
Дата сообщения: 06.01.2004 19:17
Пожалуйста, с использованием сокетов. Слегка переделать и будет работать даже в *nix
http://www.codenet.ru/progr/visualc/socket.php
Автор: mihas83
Дата сообщения: 07.01.2004 11:15
Arion

Цитата:
Пожалуйста, с использованием сокетов.

Это, пожалуй, будет "оптимально классическое решение"...
Альтернатива - DCOM, но это - "огромная глыба" и к 20 числу не успеешь...
Автор: Spin
Дата сообщения: 08.01.2004 00:17
CSocket и вперед
=)

Есте еще MailSlot но это кажется врядли подойдет.
Автор: mihas83
Дата сообщения: 08.01.2004 07:32
Spin

Цитата:
Есте еще MailSlot но это кажется врядли подойдет.

Почему же? Вполне подойдет... Когда-то писал и "общались" несколько компьютеров...
Автор: ollv
Дата сообщения: 08.01.2004 10:38
Имхо пиши на сокетах, CSocket или АПИ небольшая разница и потом пригодится... причем библиотеки сокетов заимствованы и очень похожи на аналоги в линуксе/юн..
ИМХо пайпы тормознее, пробовал .. 9* - клиент, на НТ сервер .., в 9* - только клиент создается.
Майл слот не пробовал
А так, вариантов тьма, любой протокол нетбиосы и куча еще, но в наше время все таки лучше пользовать TCP/IP
Автор: dmka
Дата сообщения: 08.01.2004 16:48
В условии задачи не сказано, что сеть ip-шная
Если это подразумевается, тогда конечно на сокетах проще всего. Можно даже вторую прогу не писать, а использовать net cat в режиме прослушивания порта
Автор: mihas83
Дата сообщения: 08.01.2004 17:08
dmka

Цитата:
использовать net cat в режиме прослушивания порта

Поподробнее: что имеешь в виду?
Автор: ollv
Дата сообщения: 08.01.2004 18:25
/*В условии задачи не сказано, что сеть ip-шная*/
Ну ежели в таком контексте, то вопрос вообще смысла не имеет, т.к. не знаем платформы )) Просто если уж разговоры идут про пайпы и винду, то сетка вряд-ли будет без поддержки тцпайп.
Автор: dmka
Дата сообщения: 08.01.2004 23:16
net cat - есть такая телнет-подобная утилита, кроме всего прочего позволяет слушать указанный порт и выдавать все что в него пришло на экран. Утилита вообще-то юниксовая, но есть и портированные под win32 версии (искать netcat win32)

запускается так: nc -l -p 9999 (слушает 9999-й порт)

для проверки в другом окне запускаешь telnet 127.0.0.1 9999 и видишь в первом окне все что набираешь во втором.

Кстати, файлы оно тоже слать умеет
nc 127.0.0.1 9999 < file.txt
Автор: ollv
Дата сообщения: 09.01.2004 11:07
Ндас.. как же человеку она поможет в плане разработки ?? Или у этой улитсы есть возможность работы в разрезе взимодействия по клиент-серверным технологиям ?? Комы там ??
/* nc -l -p 9999 (слушает 9999-й порт) */ и не является ли это уже утверждением, что сеть ip - шная ?
Автор: Spin
Дата сообщения: 09.01.2004 17:59
надо бы автора позвать
=)
а то гадаем на кофейной гуще
Автор: mihas83
Дата сообщения: 09.01.2004 18:29
Spin

Цитата:
надо бы автора позвать
Ему некогда... Реализует что-то...

Цитата:
...иначе сессия будет завалена и возможно даже выгонят из института.
Может потом "доложит"...
Автор: mc
Дата сообщения: 09.01.2004 21:44
Здравствуйте. Хочу сразу поблогадорить всех, за то что помогли мне немного разобраться, без вас бы я завалил бы сессию.
Не отвечал, т.к. не мог 2 дня нормально выйти в инет из-за поломки у провайдера (живу в небольшом городе, поэтому провайдер 1 и если у него проблемы с инетом, то и у всего города конект отстойный). Можете не удивляться это у нас происходит 1 или 2 раза в год (традиция блин).
Я прочитал статьи и посмотрел разные проги и сейчас уже пишу программу, завтра пойду её тестировать. Кстати вопрос, а можно ли как нибудь с имитировать сеть на одном компьютере (тобишь на моём), а то в институт идти накладно.
Автор: mihas83
Дата сообщения: 09.01.2004 22:20
mc
Цитата:
...и сейчас уже пишу программу
Так на чем все-таки остановился? На сокетах?
Автор: rew
Дата сообщения: 10.01.2004 03:49

Цитата:
Кстати вопрос, а можно ли как нибудь с имитировать сеть на одном компьютере (тобишь на моём), а то в институт идти накладно

соединяйся с localhost или 127.0.0.1
Автор: Arion
Дата сообщения: 10.01.2004 10:36

Цитата:
а можно ли как нибудь с имитировать сеть на одном компьютере


Да ради бога - ставь Vmware Workstation и будет тебе сеть.


Цитата:
В условии задачи не сказано, что сеть ip-шная

Ну и что, WinSock ориентирован на работу с довольно широким набором протоколов, кроме TCP/IP можно использовать NetBIOS,Appletalk,IPX/SPX и ряд других. См http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsasocket_2.asp
Автор: mc
Дата сообщения: 10.01.2004 23:22
>mihas83
выбрал сокеты, т.к. про них нашёл немного инфы.

http://www.sources.ru/cpp_network.shtml - а здесь я нашёл немного информации и исходников по сети.
Автор: NikNikolaich
Дата сообщения: 16.06.2006 15:28
Господа!

Хотелось бы узнать, можно ли как-нибудь сделать так, чтоб два (или больше) компьютера общались между собой онлайн через инет? Я имею в виду написать такую прогу, которая бы передавала некоторые данные на другой комп, где соответственно такая же прога получала бы его и отправляла бы ответы?

В общих чертах, хотябы, как сделать?

Спасибо.
Автор: OdesitVadim
Дата сообщения: 16.06.2006 15:36
А открой в Делфи примеры инди и посмотри, там есть пример чата.
Или тебе под С?
В общих чертах это делается так. Одна машина создаёт сервреный сокет, другае - клиентский и подключается к серверному. Потом начинается бурный обмен данными, который при синхронных сокетах ничем принципиально не отличается от чтения/записи файов (ну не совсем, но идея такая же).
А что будут передавать и принимать - это как протокол придумаеш
Автор: NikNikolaich
Дата сообщения: 16.06.2006 15:48
OdesitVadim
Мне в Делфи. А как клиент распознает сервер в сети?
Автор: OdesitVadim
Дата сообщения: 16.06.2006 16:27
NikNikolaich
Цитата:
А как клиент распознает сервер в сети?


Он должен знать его адрес (айпишник и за надобностью порт)
Автор: Mickey_from_nsk
Дата сообщения: 19.06.2006 09:18
OdesitVadim
Ну можно броадкастом поискать Или через AD.
Автор: NikNikolaich
Дата сообщения: 19.06.2006 12:43
Mickey_from_nsk
Это как?
Автор: Mickey_from_nsk
Дата сообщения: 19.06.2006 13:19
Оба эти способа не совсем тривиальные, но и высшим пилотажем их не назовешь.
Это делается так.
1 способ - через Broadcast.
Серверный комп сидит на сети и слушает все в свой порт.
Клиентский комп знает только порт сервера (он находится в той же сети или на маршрутизаторе поднят relay для broadcast). Клиентский порт посылает (видимо по UDP) сообщение на broadcast адрес для своей сети. Если не ошибаюсь, Broadcast адрес для сети является адрес со всеми единицами в части не закрываемой маской. Например, для сети
192.168.1.0 с маской 255.255.255.0 является адрес 192.168.1.255.
Если сервер слушает, ему придет пакет с заполненным полем from. В ответ, по этому полю он может отправить уже направленный пакет обратно. Клиент его получит и в поле from будет написано кто же сервер.

2. способ - через динамический DNS, поднимаемый в Active Directory. Так делают все продвинутыве виндовые тулзы. Только я не знаю, есть ли для него API. Просто регистрируешь свой сервер в этом DNS, например как myserv.mycompany.com.
Затем клиент, зная DNS имя сервера (как службы) делает DNS запрос и получает IP для компа.
Автор: vshersh
Дата сообщения: 21.06.2006 21:40
Mickey_from_nsk
IMHO без выделенного IP так не получится, а если IP выделен - то зачем заморачиваться

Страницы: 12

Предыдущая тема: Разработка для Windows и Linux


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.