Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 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-сайт: www.aliyev.us
 Профиль | | #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)
  ;DoCommand cmddata, vardata
End Sub

Ответить

Номер ответа: 3
Автор ответа:
 Millenium



ICQ: 629966 

Вопросов: 118
Ответов: 903
 Web-сайт: www.aliyev.us
 Профиль | | #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-сайт: www.aliyev.us
 Профиль | | #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-сайт: barsik.newmail.ru
 Профиль | | #5
Добавлено: 21.10.04 14:32
RA (Millenium) а ято в одном ответе написать низя было???

Ответить

Номер ответа: 6
Автор ответа:
 Millenium



ICQ: 629966 

Вопросов: 118
Ответов: 903
 Web-сайт: www.aliyev.us
 Профиль | | #6
Добавлено: 21.10.04 14:36
Ну я технически ;) на сохранить нажымал...
Вёрд даконал :)
А ты вот возьми и обядени в одно челое!
Всем удачи! Пока!

Ответить

Номер ответа: 7
Автор ответа:
 Barsik



Разработчик Offline Client

ICQ: 343368641 

Вопросов: 17
Ответов: 686
 Web-сайт: barsik.newmail.ru
 Профиль | | #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-сайт: www.aliyev.us
 Профиль | | #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-сайт: barsik.newmail.ru
 Профиль | | #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-сайт: dasharm.com
 Профиль | | #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-сайт: dasharm.com
 Профиль | | #15
Добавлено: 22.10.04 14:36
ещё, если вы заметили, я нарочно допустил 2 ошибки в предыдущем сообщении. Кто найдет их (двух) - дам семизнак 8238880 (ICQ). ищите :)

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам