Страница: 1 | 2 | 3 |
Вопрос: WinSOCK
Добавлено: 20.10.04 23:18
Автор вопроса: AgentFire | ICQ: 192496851
Как через WinSock послать некое сообщение всем, кто находиться в локалке. Слыхал, через 255.255.255.255, но как? Ведь клиент должел бык хоть к кому-то подключен, а сервер тоже должен быть настроен с каким-то клиентом? Или не так? Подскажите.
Ответы
Всего ответов: 31
Номер ответа: 1
Автор ответа:
LamerOnLine
ICQ: 334781088
Вопросов: 108
Ответов: 2822
Профиль | | #1
Добавлено: 21.10.04 08:21
Послать сообщение - это, как правило, на UDP. Там нет клиентов и серверов. И
коннекта тоже.
Номер ответа: 2
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #2
Добавлено: 21.10.04 08:42
Вариант кода пишу сюда (Соединение типа TCP)
Server:
Код формы (frmServer):
Private Sub Form_Load()
If App.PrevInstance = True Then
MsgBox "Уже запущен!", vbInformation + vbOKOnly
Unload frmServer
End If
tcpServer.LocalPort = 123 'Установить порт 123
tcpServer.Listen 'Начать "Прослушку"
End Sub
Private Sub Form_Unload(Cancel As Integer)
tcpServer.Close 'Закрыть соединение
Unload frmServer 'Выгрузить форму из памяти
Set frmServer = Nothing 'Освободить место занемаемая формлй в памяти
End 'Ну это и тупому ясно
End Sub
Private Sub tcpServer_ConnectionRequest(ByVal requestID As Long)
tcpServer.Close 'Закрыть если ошибка
tcpServer.Accept requestID 'chap nhan moi yeu cau den
End Sub
Private Sub tcpServer_Error(ByVal Number As Integer, Description As String, ByVal Scode As Long, ByVal Source As String, ByVal HelpFile As String, ByVal HelpContext As Long, CancelDisplay As Boolean)
On Error Resume Next 'ngan moi error
tcpServer.Close 'dong connection
tcpServer.Listen 'listen lan nua
End Sub
Private Sub tcpServer_DataArrival(ByVal bytesTotal As Long)
Dim vardata As String
Dim strdata As String
Dim cmddata As String * 3
tcpServer.GetData strdata
cmdData = Left(strdata, 3)
vardata = Right(strdata, Len(strdata) - 3)
 oCommand cmddata, vardata
End Sub
Номер ответа: 3
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #3
Добавлено: 21.10.04 08:46
А втот модул:
mdlCommands:
Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Dim SendStr As String, ReturnStr As String
Public Function DoCommand(command As String, data As String)
Select Case LCase(command)
Case "opn" 'Открыть лоток дисковода
SendStr = mciSendString("Set cdaudio door open", ReturnStr, 0, 0) 'Îòêðûâàåò ëîòîê CD-ROM
Case "cls" 'Закрыть лоток
SendStr = mciSendString("Set cdaudio door closed", ReturnStr, 0, 0) 'Çàêðûòü ëîòîê CD-ROM
Case "msg" 'Послать сообщение
MsgBox data, vbInformationvbSystemModal, "Сообщение"
End Select
End Function 'Конец фцнкции
Номер ответа: 4
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #4
Добавлено: 21.10.04 08:58
А теперь код КЛИЕНТА
cmdConnect - кнопка для соединения
cmdDisconnect - Кнопка для отсоединения
txtIP - текстовый ящик для ввода IP адреся или имени хоста
txtPort - Номер порта (любой, но не занятые (типа 25 или 39))
cmdExit - Кнопка для выхода
App.Title - Задайте в свойствах проекта (имя)
Dim StatMsg(2) As String
Private Sub cmdConnect_Click()
If txtIP.Text = vbNullString Then
MsgBox "Введите существующий IP адресс или имя хоста", vbInformation
Exit Sub
End If
cmdConnect.Enabled = False
cmdDisconnect.Enabled = True
frmClient.Caption = App.Title & " - Подключается..."
tcpClient.Connect txtIP.Text, txtPort
End Sub
Private Sub cmdDisconnect_Click()
frmClient.Caption = App.Title & " - Отключен"
cmdDisconnect.Enabled = False
cmdDisconnect.Enabled = False
cmdConnect.Enabled = True
tcpClient.Close 'Закрыть соединение
End Sub
Private Sub cmdExit_Click()
'Завершить работу предворительно выключив всё
Call cmdDisconnect_Click
Unload frmClient
Set frmClient = Nothing
End
End Sub
Private Sub Form_Load()
frmClient.Caption = App.Title
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call cmdExit_Click
End Sub
Private Sub tcpClient_Connect()
frmClient.Caption = App.Title & " - Подключен"
End Sub
Private Sub cmdOpen_Click()
'ПРи нажатии на кнопку послать сообщение об открытие СД
If tcpClient.State = sckConnected Then tcpClient.SendData "opn" Else Msg 0
End Sub
Private Sub cmdClose_Click()
'Закрыть лоток
If tcpClient.State = sckConnected Then tcpClient.SendData "cls" Else Msg 0
End Sub
Private Sub cmdMsg_Click()
'Отправить мессаж
If tcpClient.State = sckConnected Then tcpClient.SendData "msg" & txtMsg Else Msg 0
End Sub
Public Function Msg(MsgNo As Integer)
Select Case MsgNo
Case 0
MsgBox "Клиент не подключен!", vbExclamation
Case Else
MsgBox "Неопознанная ошибка", vbExclamation
End Select
End Function
ПРошу любить и жаловать!!!
Номер ответа: 5
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #5
Добавлено: 21.10.04 14:32
RA (Millenium) а ято в одном ответе написать низя было???
Номер ответа: 6
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #6
Добавлено: 21.10.04 14:36
Ну я технически на сохранить нажымал...
Вёрд даконал
А ты вот возьми и обядени в одно челое!
Всем удачи! Пока!
Номер ответа: 7
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #7
Добавлено: 21.10.04 14:50
это накручиванием рейтинга называется...
Номер ответа: 8
Автор ответа:
User Unknown
Вечный Юзер!
ICQ: uu@jabber.cz
Вопросов: 120
Ответов: 3302
Профиль | | #8
Добавлено: 21.10.04 15:05
2Barsik, Нет не накручивание. просто тут тоже есть ограничение на длину поста.
Номер ответа: 9
Автор ответа:
Millenium
ICQ: 629966
Вопросов: 118
Ответов: 903
Web-сайт:
Профиль | | #9
Добавлено: 21.10.04 15:07
Ааа... если ты про рейтинг, то ты ошибсешся...
Если бы я хотел бы чтоб у мя рейтинг поднялся, то во всех вопросах оставил бы рейтинг. Ты не прав. Я этого не добевался.
Просто часть клиента я писал на ноутбуке.
А другую уже на настольном еаписал!
И не надо придиратся по поводу рейтинга!
В следующий раз буду гадиной, и отправлю ответы напрямую в почту вопросодателя. А то РЕЙТИНГ понимаещ ли...
ПУсть уже лично будут спрашывать и просить ответ!
Эхххх вы....
Номер ответа: 10
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #10
Добавлено: 21.10.04 17:39
Barsik
Noviks
Если знаеш диапазоны локалки, тогда можно просто циклом айпи крутить...
Номер ответа: 11
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #11
Добавлено: 21.10.04 22:32
Видать, меня, наверно, не совсем поняли.
Я пишу игру, где у предпологаемого клиента будет список серверов. А сервер(ужа начавшаяся ига) должен поймать сигнал и послать клиенту имя сессии, игроков, но это уже моя проблема, что отсылать.
Номер ответа: 12
Автор ответа:
Barsik
Разработчик Offline Client
ICQ: 343368641
Вопросов: 17
Ответов: 686
Web-сайт:
Профиль | | #12
Добавлено: 22.10.04 10:16
да ладно раслабьтесь ребята....
Номер ответа: 13
Автор ответа:
ZagZag
ICQ: 295002202
Вопросов: 87
Ответов: 1684
Профиль | | #13
Добавлено: 22.10.04 13:13
Noviks, я тебя все еще не пойму.... у темя "СЕРВЕР" это программа постоянно
запущенная или тоже такая же игра, но с включенной опцией "Быть сервером"?
Номер ответа: 14
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #14
Добавлено: 22.10.04 14:33
Блин, вот смотрю на кучу писанины, и смеюсь все время. Неужели никто человеку даже намикнуть не может, как и что делать???
Задача:
У нас есть n серверов и m клиентов, нужно, чтобы по определенному запросу клиента n каждый сервер m отвечал полоджительным откликом, так клиент может собрать список серверов.
Начинаем решать задачу:
Для минимизации траффика нужно использовать протокол UDP. Так и будем делать. Пусть, клиент отошлет свой АйПи серверу, на что последний должен ответить своим айпи адресом. Пример:
cli: >
w.connect "125.12.1.12",777
w.SendData "125.12.1.15" 'or w.LocalIp
srv: > По приходе данных
w.SendData w.LocalIp
Хорошо, но как узнать айпишки серверов?Методом перебора. Нужно отсканировать диапазон айпишек в локалке? Вот на этом шаге, все мне известные сетевые ВБ программеры кидали свои проекты . Итак, в ТСР есть 4 основных класса подсетей, в локалках исп. класс С (тупые админы могут иной использовать).Номер хоста в подсети класса С определяется последним октетом.При отправлении широковещательного сообщения оно отправляется по адресу xxx.xxx.xxx.255 (!).Номера, разрешенные для присваивания хостам: от xxx.xxx.xxx.1 до xxx.xxx.xxx.254, а если дейтаграма идет на xxx.xxx.xxx.255 то все хосты подсети получат её, понятно, надеюсь?
Кроме слассовой модели, есть ещё и бесклассовая модель (CIDR), она часто встречаеться в крупных организациях, инет провайдерах, но не в простых локалках (хотя криворукие админы такое могут...). Обяснять как вычислить широковещательный адрес в бесклассовой модели мне впадляк, читайте доки и меньше порнухи смотрите. БАй!
Номер ответа: 15
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #15
Добавлено: 22.10.04 14:36
ещё, если вы заметили, я нарочно допустил 2 ошибки в предыдущем сообщении. Кто найдет их (двух) - дам семизнак 8238880 (ICQ). ищите