Сеть

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сеть

Сообщение Max! » 07.11.2003 (Пт) 0:56

Дапустим есть три компа 1 из них главний и надо что бы при помощи нажатия на кнопку на форме мозно было выключить комп1 или комп2
(глав комп3) Как это реализовать? :!:
Max!

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 07.11.2003 (Пт) 2:17

Привет

"Завязываешь" два компа на третий при помощи простейшего клиент-серверного приложения. Т.е. Два компа коннектятся к третьему и просто работают ожидая запросов третьего компа... а там просто реализуешь механизм выключения компа
Код: Выделить всё
shell "rundll32 krnl386.exe,exitkernel"

который выполняется при поступлению от сервера клиенту заданной команды. (это неоднократно рассматривалось на стараницах форума)

По оформлению, ну можешь создать комбобокс на форме и выбирая комп, нажимать кнопку - посылая ему тем самым код на отрубку :)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 07.11.2003 (Пт) 17:06

Ок! Как что бы в комбобоксе показывало список компов (включенных)
И еще дапустим я выбераю в списке комп и нажимаю кнопку (как что бы прога выключала имменно выбраный комп и как что бы прога посылала запрос и выключала комп , а надо чтоб прога стояла на других компах кроме главного? И если не привязывать их к главному кампу?) Желательно Кодом! :? Срочно!!! :x :x :x
Max!

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 08.11.2003 (Сб) 1:22

Вопрос: Как что бы в комбобоксе показывало список компов (включенных).
Ответ: Пусть твой комп всегда включен - он сервер. При запуске другие компы устанавливают соединение с твоим ... и когда ты соглашаешься на коннект (ты присваиваешь каждому клиенту свой номер) ... впрочем, можно особо не мудрить, у тебя каждый комп работает со своим ВИНСОКОМ, (а винсоки у тебя записаны в МАССИВ), тогда, например, Winsock(0) - 1й комп, Winsock(1) -2й.
А комбобокс зависит от таймера (таймер проеряет устновлено ли соедиение каждого винсока, если УСТАНОВЛЕНО - Заносим в список (имя компа) иначе пишем что никого там нет:)).

Это все слова ... вот код:
Код: Выделить всё
Private Sub Command1_Click()
If Combo1.ListIndex = -1 Then Exit Sub
If Combo1.Text <> "DisConnect" Then
  'реализуем отправку команды на выключение клиента
  'по нажатию на кнопку
  WinPort(Combo1.ListIndex).SendData "MUST DIE"
End If
End Sub

Private Sub Timer1_Timer()
If WinPort(0).State <> 7 Then Combo1.AddItem "DisConnect", 0
If WinPort(1).State <> 7 Then Combo1.AddItem "DisConnect", 1
End Sub

Private Sub WinsMain_ConnectionRequest(ByVal requestID As Long)
'Мы пока не знаем как зовут комп
P = -1
If WinPort(0).State <> 7 And P = -1 Then P = 0
If WinPort(1).State <> 7 And P = -1 Then P = 1
If P = -1 Then Exit Sub
WinPort(P).Accept requestID
Combo1.AddItem "Connect to [noname]", P
'Отправляем команду, получив которую
'клиент присылает свое имя и мы его записываем
'в комбобокс
WinPort(P).SendData "GET NAME"
End Sub


Код обработки полученого ответ я не пишу, там и так все ясно :)
WinPort(0), WinPort(1) - винсоки настроены на порты (разные порты)
WinMain - винсок на которой идут все запросы и конечно свой ПОРТ

Далее думаю ясно...
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 08.11.2003 (Сб) 1:26

Ну конечно ... на тех компах ... хотя бы просто клиент должен быть :))) .... который проосто загружается в автозагрузке например ... и не имеет интерфейса, просто модуль и все, даже не прописывается в меню выгрузки программ :)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 08.11.2003 (Сб) 3:43

Ошибка ! Sub or Function not defined !!! И обводит If WinPort(0) в Timer'е!
Max!

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 08.11.2003 (Сб) 3:46

Странно .. а как у меня проскачило?
Стукни -ка мне в асю!!!
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 08.11.2003 (Сб) 3:47

Да ... вот ася 169363579:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 08.11.2003 (Сб) 3:51

Есть ещё вот такой вариант ...

Код: Выделить всё
Private Sub Timer1_Timer()
  If WinPort(0).State <> 7 Then Combo1.List(0) = "DisConnect"
  If WinPort(1).State <> 7 Then Combo1.List(1) = "DisConnect"
End Sub
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 08.11.2003 (Сб) 14:06

Я делаю прогу другу! Мне надо просто чтобы прога показывала все 10-ть компов в списки и кнопка , он выберает в списки комп нажимает на кномку и комп выключается! Подроб:

Я разместил на форму ComboBox имя которого: Combo1 и кнопку.

В кнопку вставил код:

Код: Выделить всё
If Combo1.ListIndex = -1 Then Exit Sub
If Combo1.Text <> "DisConnect" Then
  'реализуем отправку команды на выключение клиента
  'по нажатию на кнопку
  WinPort(Combo1.ListIndex).SendData "MUST DIE"
End If


В тимере :
Код: Выделить всё
If WinPort(0).State <> 7 Then Combo1.List(0) = "DisConnect"
  If WinPort(1).State <> 7 Then Combo1.List(1) = "DisConnect"

Интервал: 1000

И запускаю прогу и ошибка: Sub or Function not defined !!!
Может я чегота не допонимаю! :x
Max!

FaKk2
El rebelde gur&#250;
El rebelde gur&#250;
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 08.11.2003 (Сб) 18:28

А подумать.... :evil:
Русским же языком сказано.....Функции WinPort нет....значит надо её вписать\объявить....
Для получения ответа надо продемонстрировать качества, позволяющие стать компетентным — внимательность, вдумчивость, наблюдательность, желание активно участвовать в выработке решения.

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 08.11.2003 (Сб) 21:47

1)Тогда в General пишем Dim WinPort as 'а тут как указать'?
2)Или иначе надо вписать\объявить?
:?
Max!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 08.11.2003 (Сб) 22:04

FAKK2 писал(а):А подумать.... :evil:
Русским же языком сказано.....Функции WinPort нет....значит надо её вписать\объявить....


Тээкс... WinPort - это функция? :twisted:

Напишите Max!'у программу, а то он не понимает, про что мы тут :(
Хотя можете попытаться ему растолковать, что к чему...

WinPort - это имя элемента управления Microsoft Winsock Control, "поставленного" на форму. У него к тому же 2 экземпляра с индексами (свойствами Index) 0 и 1.

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 08.11.2003 (Сб) 23:33

Все работает !!! Последнее:
Как сделать чтобы прога сама записывала имена компов которые в сети в Combo1? Допустим компов там 12-ать!
Max!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 09.11.2003 (Вс) 0:09

Для этого Вам необходимо создать в начале (на форме) только один контрол Winsock с индексом 0, а затем по мере подключения к прослушивающему порту подгружать новые оператором Load WinPort(WinPort.Count).

Как только клиентские части на удалённых <двенадцати> компьютерах подключатся к серверу - этому приложению, они должны послать имя компьютера:

RemoteWinPort.SendData RemoteWinPort.LocalHost

А WinPort(Index) при приёме данных с именем компьютера должен их засунуть в ComboBox:

Private Sub WinPort_DataArrival(Index As Integer, ByVal bytesTotal As Long)
WinPort(Index).GetData strData, , bytesTotal
Combo1.AddItem strData
End Sub

Приблизительный алгоритм такой, дальше сам дописывай... :wink:

P.S. динамическое добавление Winsock'ов можно посмотреть на примере любого чата на VB... Поищите примеры, например, на Яндексе

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 09.11.2003 (Вс) 0:15

Слава богу!

Извини, если я что-то коряво написал ... наверное надо было подронее под кодом написать ...

Совершенно верно описан алгоритм соединения, только не забудь НОВЫЕ контролы удалять после дисконнекта, и придумывать для них новые порты при коннекте.

Собствено вариант с двумя ВИНСОКАМИ (а точнее с тремя) ... предполагает только два компа ... тут все просто ... а там тоже не сложно но немножко код поменять :)

Удчного десигна:)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 09.11.2003 (Вс) 1:10

Цитирую:

Для этого Вам необходимо создать в начале (на форме) только один контрол Winsock с индексом 0, а затем по мере подключения к прослушивающему порту подгружать новые оператором Load WinPort(WinPort.Count).

Как только клиентские части на удалённых <двенадцати> компьютерах подключатся к серверу - этому приложению, они должны послать имя компьютера:

RemoteWinPort.SendData RemoteWinPort.LocalHost

А WinPort(Index) при приёме данных с именем компьютера должен их засунуть в ComboBox:

Private Sub WinPort_DataArrival(Index As Integer, ByVal bytesTotal As Long)
WinPort(Index).GetData strData, , bytesTotal
Combo1.AddItem strData
End Sub

Приблизительный алгоритм такой, дальше сам дописывай...

P.S. динамическое добавление Winsock'ов можно посмотреть на примере любого чата на VB... Поищите примеры, например, на Яндексе

Конец цитаты!

А если компы уже работают , а ты только запускаешь прогу , как сделать чтобы имена этих компов всеравно записались в Combo1?
Max!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 09.11.2003 (Вс) 1:15

Очевидно, удалённые клиенты должны время от времени (по Timer'у) пытаться подключиться к серверу (скажем, раз в 10 секунд)... В случае успеха подключения - отправляют своё имя, иначе же ждут ещё немного и снова пытаются...

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 09.11.2003 (Вс) 1:27

Так значит у тех пользователей тоже должна стоять прога каторая посылает запрос на сервер! Еще вопрос: а если те компы не будут иметь проги и не будут посылать запрос на сервер со сваим именем , как сделать чтобы прога сома получала имена дапустим как "Мае сетевое окружение"
Max!

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 09.11.2003 (Вс) 1:30

а почаму бы и нет, пусть ждут ... им же выгода от этого ...
Значит клиент - прога котороая коннектится время от времени ... (и уникальность проверь ...) ... вдруг с одного компа захотят коннектится сразу два клиента :)
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 09.11.2003 (Вс) 1:40

А кодом как ! Если взять и юзать эту прогу на обычном компе (не на серваке) как чтобы в Combo1 всеравно писались имена! Вот я не сервак и я проверяю эту прогу и я хочу дабиться чтобы наконец в Combo'xe мне писались имена остальных пользователей!
Max!

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Сообщение Amed » 09.11.2003 (Вс) 1:57

Что ты имеешь в виду?
То, что не можешь запустить клиент и сервер на одном компьютере???

Выражайся яснее! :?

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 09.11.2003 (Вс) 1:59

Когда проверяешь просто напиши при коннекте на клиенте адрес компа 127.0.0.1 ... и все тогда он сам себя и отрубит :)

Я чего-то не понял чего ты хочишь...
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 09.11.2003 (Вс) 3:20

Ok! Тогда поставим вапрос так: Я имею майо сетевое окружение (я не сервер) и я хачу написать прогу каторая будет показывать в Combo1 или еще где то компы каторые находятся в сети (включ) ! Мне нужен этот код этот алгоритм !!! :evil: Я все перепробывал но невыходит у меня HELP PLEASE!!! :x
Max!

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 09.11.2003 (Вс) 3:40

Первое что мне приходит на ум - 1 сервак, который всегда работает - скажем так рабочая машина ... а потом каждая машина когда коннектится к серваку отправляет ему свое имя и взамен получает спосок включенных машин ...
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Susanin
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 20.06.2003 (Пт) 19:57
Откуда: Самара

Сообщение Susanin » 09.11.2003 (Вс) 14:02

Зачем все эти клиент-серверные приложения!!!!!!!!!Я идиот! Убейте меня, кто-нибудь!????
Да зделай проще - возьми малехонькую утилитку psshutdown.exe
С её помощью могешь любую машинку в сети выключить и не тока...
А по вопросу создания списка активных машин - все бы проще решалось если можно было-бы проанализировать результат выполнения любой сетевой команды в ДОС. Допустим Пинг... там сразу стало-бы ясно какая машина включена, какая нет.. Вот тока я не знаю как получить в программу эту самую строку рельтата выполнения. .. И на данную тему никто не ответил - значит это и не возможно, в принципе..
А про утилитку - если не найдешь в инете - пиши мне на мыло скину... В ней можна не тока машинку вырубить и но и заблокировать и ребутнуть и сеанс завершить... и не надо никакой клиентской части ставить....
Susanin
А все ли дороги ведут в Рим?

Susanin
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 20.06.2003 (Пт) 19:57
Откуда: Самара

Сообщение Susanin » 09.11.2003 (Вс) 14:19

ЗЫ.
Оказывается есть способ получить список активных машин без установки клиентской части.
Через Shell запускать Ping до этой машины с добавление ">C:\111.txt"
Тогда результат будет сваливаться в текстовый файл. Ну а тут уже дело техники.. Проанализировать этот файл и получим список активных машин.. :D :D :D
Эту процедуру можна запускать в любое время, а не обазательно до запуска клиентских частей (т.к. их нет). А потом через определенное время - по таймеру - повторять..
А про выключение машин - читай сообщение выше.
:D :D Susanin
А все ли дороги ведут в Рим?

Max!
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 502
Зарегистрирован: 03.04.2003 (Чт) 22:08
Откуда: Литва

Сообщение Max! » 09.11.2003 (Вс) 23:11

Цитирую:
ЗЫ.
Оказывается есть способ получить список активных машин без установки клиентской части.
Через Shell запускать Ping до этой машины с добавление ">C:\111.txt"
Тогда результат будет сваливаться в текстовый файл. Ну а тут уже дело техники.. Проанализировать этот файл и получим список активных машин..
Эту процедуру можна запускать в любое время, а не обазательно до запуска клиентских частей (т.к. их нет). А потом через определенное время - по таймеру - повторять..
А про выключение машин - читай сообщение выше.
Susanin
Конец цитаты!

Я так понимаю что когда мы делаем Shell "Ping >C:\111.txt" то он должен записать в C:\111.txt список (вкл) компов , далее я использую такой код:
Код: Выделить всё
Private Sub Timer1_Timer()
Shell "Ping > C:\111.txt" 'Здесь он сделал список компов

'Здесь я его перекидываю в Combo1
Dim A As String
Open "C:\111.txt" For Input As #1
Input #1, A
Combo1 = A
Close #1
Timer1.Enabled = False
End Sub

И всеравно не пашет! Может я нетак понял а?
Max!

SSecurity
Служба безопасности
Аватара пользователя
 
Сообщения: 1283
Зарегистрирован: 19.08.2003 (Вт) 1:11
Откуда: Россия, Мурманск

Сообщение SSecurity » 10.11.2003 (Пн) 0:23

это твой код ...
Код: Выделить всё
Private Sub Timer1_Timer()
Shell "Ping > C:\111.txt" 'Здесь он сделал список компов

'Здесь я его перекидываю в Combo1
Dim A As String
Open "C:\111.txt" For Input As #1
Input #1, A
Combo1 = A
Close #1
Timer1.Enabled = False
End Sub


Если у тебя он создал список машин ... то читай дальше, (у меня не создал:( - сети просто нет)

Input #1, A
Combo1 = A


замени на
Combo1.Clear
Do
Line Input #1, A
Combo1.AddItem = A
Loop Until(Eof(1))


а Timer1.Enabled = False исключить...
вроде так ...
Программист - это маленький Бог, а все его ошибки - это самостоятельные творения:)
Так задумано:)

Susanin
Начинающий
Начинающий
 
Сообщения: 21
Зарегистрирован: 20.06.2003 (Пт) 19:57
Откуда: Самара

Сообщение Susanin » 10.11.2003 (Пн) 7:42

да нет, не выдаст вам пинг просто так имена всех машин. Эту команду надо использовать для прореки конкретной машины. Т.е. надо знать или ip или имя машин и делать пинг до каждой из них, а потом анализировать результаты. По умолчанию пинг посылает 4 запроса, но это можно изменить. Под какой виндой работаешь????
Набери в командной строке Ping и увидишь все параметры.
А все ли дороги ведут в Рим?

След.

Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: PetalBot, Yandex-бот и гости: 9

    TopList