Как я могу отправлять сообщения с одного компьютера на другой, используя vb.net? - PullRequest
4 голосов
/ 25 августа 2011

Хорошо, поэтому я хотел сделать это в течение нескольких лет, и меня удивляет, что никто не может придумать решение ... Я хочу написать программу (предпочтительно на vb.net), которая может отправлять сообщение другому компьютеру (или устройству), подключенному к той же сети, что и я. Я хочу, чтобы сообщение появилось на другом компьютере (или устройстве) во всплывающем окне сообщения. Кроме того, было бы идеально, если бы это можно было сделать через какое-то соединение Bluetooth, если нет, то подойдет локальное IP-соединение. Я не знаю, как бы я поступил так, но я знаю, что это возможно, потому что я видел, как некоторые программы делают это ... на самом деле я видел программу под названием blackrain, которая без установленного дополнительного программного обеспечения может отображать сообщения на сенсорный экран ipod для инструктирования пользователя, что делать, а затем практически мгновенно отображает результаты их ввода на экране компьютера. Я хотел бы знать, как это работает, если у кого-то есть мысли, пожалуйста, не стесняйтесь делиться ими!

Дополнительные сведения:

  • У меня большой опыт работы с vb.net, функциями командной строки и vbscript.

  • В настоящее время я использую Windows 7 Professional x64

  • У меня есть внешний мини-адаптер Bluetooth.

  • Мне бы хотелось, чтобы это было (если возможно) похоже на те приложения для ipod / iphone, которые позволяют вам управлять курсором вашего ноутбука по синхронизации Wi-Fi; в том смысле, что не требуется никакой настройки и не требуется никакого дополнительного программного обеспечения. (Пример: remotepad.ipa)

Код для окна сообщения будет выглядеть примерно так:

ObjClient = New TcpClient("127.0.0.1", 1000)
TcpClient.Start()
Messagebox.Show("Popup Message Here")
TcpClient.Close()

Я знаю, что этот код будет выполнять то же самое в командной строке:

msg * /SERVER:localhost hello 

или этот код будет делать то же самое в командной строке:

msg * hello > localhost

Но я хочу сделать это без командных файлов, если это возможно, потому что я не хочу ничего настраивать на другом конце.

Спасибо!

Возможно, это как-то связано с сокетами или портами?


1 Ответ

2 голосов
/ 25 августа 2011

Использование TcpClient и связанных библиотек, безусловно, является правильным ответом.

Пример кода для записи данных на определенный IP / порт:

''' <summary>
''' Send data over TCP/IP network
''' </summary>
''' <param name="data">Data string to write</param>
''' <param name="IP">The connected destination TcpClient</param>
Public Sub WriteData(ByVal data As String, ByRef IP As String)
    Console.WriteLine("Sending message """ & data & """ to " & IP)
    Dim client As TcpClient = New TcpClient()
    client.Connect(New IPEndPoint(IPAddress.Parse(IP), My.Settings.CommPort))
    Dim stream As NetworkStream = client.GetStream()
    Dim sendBytes As Byte() = Encoding.ASCII.GetBytes(data)
    stream.Write(sendBytes, 0, sendBytes.Length)
End Sub

Используйте TcpListener для отслеживания входящих данных.

http://msdn.microsoft.com/en-us/library/system.net.sockets.tcplistener.aspx

edit: Чтобы узнать, на какой IP-адрес его отправлять ... У вас может быть список внутренних IP-адресов для подключения, или каждый сетевой компьютер «подписывается» на вашпрограмма, если она размещена статически на коробке.Для моих целей, когда я использую этот код, хост-процесс находится на известном сервере.Клиентские процессы, которые хотят получать сообщения, отправляют на хост быстрое сообщение, которое затем записывает IP-адрес для последующей отправки.

Получение IP запрашивающего клиента:

''Given variable m_listener is an active TcpListener...
Dim client As TcpClient = m_listener.AcceptTcpClient()
Dim requesterIP As String = client.Client.RemoteEndPoint.ToString().Split(New Char() {":"})(0)
...