Помогите с отправкой текста по TCP / IP или локальной сети - PullRequest
0 голосов
/ 24 октября 2010

Привет всем, что я пытаюсь отправить текстовое сообщение с виртуальной машины (VMWARE) на мою локальную машину, чтобы я мог нажать кнопку в ВМ и заставить ее что-то делать на локальной.

Есть ли способ отправить текст через IP, TCP / IP, LAN, используя VB6 или VB.net? Я искал net send , чтобы отправить что-то, но у меня это не сработало (как и всплывающее диалоговое окно для каждого отправляемого вами текста). Я уже попробовал это:

http://www.codeproject.com/KB/vb/CfSimpleSendComp.aspx

Но на моем компьютере это вообще не работает? Я попробовал как IP-адрес компьютера, так и имя компьютера. Может быть .NET Remoting в VB?

Может ли кто-нибудь дать мне знать, если есть другие способы сделать то, что я хотел бы сделать?

Спасибо!

David

Ответы [ 3 ]

1 голос
/ 24 октября 2010

Есть несколько способов. Лучший способ зависит от того, как вы определяете «текстовое сообщение».

Если вам буквально нужно нажать кнопку и запустить команду на удаленном компьютере, я бы запустил PsExec в объекте Process. Дрянной, но эффективный. Что-то вроде:

Using p as new Process()
    p.StartInfo.FileName = "c:\path\to\PsExec.exe"
    p.StartInfo.Arguments = "\\RemoteComputerName RemoteCommand.exe"
    p.Start()
End Using

Если вам нужна двусторонняя связь с пользовательским протоколом, я бы использовал WCF или TCPListener и TCPClient для создания собственного сокет-сервера и клиента.

Я бы держался подальше от удаленного взаимодействия.

1 голос
/ 25 октября 2010

Вы также можете использовать Eneter Messaging Framework.
Это легкий и очень простой в использовании.

Извините, я не знаком с синтаксисом VB, но в C # вся реализация находится здесь: (Вы можете скопировать вставить код в свой проект, включить Eneter.Messaging.Framework.dll и изменить IP на ваш.)

Сервер, прослушивающий строковые сообщения.

using System;
using Eneter.Messaging.EndPoints.StringMessages;
using Eneter.Messaging.MessagingSystems.MessagingSystemBase;
using Eneter.Messaging.MessagingSystems.TcpMessagingSystem;

namespace StringReceiver
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create Tcp based messaging.
            IMessagingSystemFactory aTcpMessaging = new TcpMessagingSystemFactory();
            IInputChannel anInputChannel = aTcpMessaging.CreateInputChannel("127.0.0.1:7091");

            // Create string message receiver
            // Note: it is possible to receiver typed messages too.
            IStringMessagesFactory aStringMessagesFactory = new StringMessagesFactory();
            IStringMessageReceiver aStringMessageReceiver = aStringMessagesFactory.CreateStringMessageReceiver();
            aStringMessageReceiver.MessageReceived += StringMessageReceived;

            // Attach the input channel to the string message receiver
            // and start listening.
            Console.WriteLine("String sercer is listening.");
            aStringMessageReceiver.AttachInputChannel(anInputChannel);
        }

        // Processing messages.
        static void StringMessageReceived(object sender, StringMessageEventArgs e)
        {
            Console.WriteLine("Received message: " + e.Message);
        }
    }
}

Клиент, отправляющий строковые сообщения:

using Eneter.Messaging.EndPoints.StringMessages;
using Eneter.Messaging.MessagingSystems.MessagingSystemBase;
using Eneter.Messaging.MessagingSystems.TcpMessagingSystem;

namespace StringMessageSender
{
    class Program
    {
        static void Main(string[] args)
        {
            // Create Tcp based messaging.
            IMessagingSystemFactory aTcpMessaging = new TcpMessagingSystemFactory();
            IOutputChannel anOutputChannel = aTcpMessaging.CreateOutputChannel("127.0.0.1:7091");

            // Create string message receiver
            // Note: it is possible to receiver typed messages too.
            IStringMessagesFactory aStringMessagesFactory = new StringMessagesFactory();
            IStringMessageSender aStringMessageSender = aStringMessagesFactory.CreateStringMessageSender();

            // Attach the output channel to the string message sender
            // so that we can send messages via Tcp to desired Ip address.
            aStringMessageSender.AttachOutputChannel(anOutputChannel);

            // Send message.
            aStringMessageSender.SendMessage("Hello world.");
       }
   }

}

Eneter Messaging Framework можно загрузить по адресу www.eneter.net .

Если вы хотите получить больше технической информации: www.eneter.net/OnlineHelp/EneterMessagingFramework/Index.html Больше примеров: eneter.blogspot.com

1 голос
/ 24 октября 2010

Вам нужны клиент и сервер, по одному на каждом конце. Они могут обмениваться данными через TCPIP (TCP или UDP), сеть Microsoft (с именами Pipes, Mailslots) или что-либо еще. Некоторые параметры зависят от того, на какой ОС работают эти две машины, но, поскольку вы упомянули NET SEND, мы, вероятно, можем предположить некоторую разновидность Windows.

Служба сообщений отсутствует в более поздних версиях Windows NT (Vista, Windows 7), поэтому это не лучший вариант. Есть и другие мессенджеры Mailslots, а также множество мессенджеров UDP.

Реальный вопрос в том, какое действие вы хотите выполнить «нажатием кнопки». Черт возьми, вы могли бы легко запустить Telnet, если бы он дал вам то, что вы хотели.

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

.Net Remoting недоступна в VB, вы должны иметь в виду VB.Net. Это технология вызова удаленных объектов, и, вероятно, не то, что вам нужно.

Вы, вероятно, быстрее получите результат, выбрав один набор инструментов разработки и используя все, что он предлагает для сокетов TCP или UDP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...