подключение к серверу localhost в приложении c # из расширения firefox

#c# #javascript #sockets

#c# #javascript #сокеты

Вопрос:

Я использую расширение firefox, которое проверяет каждый раз, когда загружается новая страница, и когда это происходит, оно отправляет запрос на подтверждение связи на веб-сервер, который у меня есть в моей программе C #. Моя проблема в том, что сервер никогда не получает запрос. Может ли кто-нибудь указать мне правильное направление, поскольку я думаю, что делаю что-то не так. Спасибо

 function examplePageLoad(event) {

  if (event.originalTarget instanceof HTMLDocument) {

    var win = event.originalTarget.defaultView;

    if (win.frameElement) {


  var socket = new WebSocket('127.0.0.1:13000');
        socket.onopen = function() {
            alert('handshake successfully established. May send data now...');
        };
        socket.onclose = function() {
            alert('connection closed');
        };
    }

  }

}


window.addEventListener("load", function () {

  gBrowser.addEventListener("load", examplePageLoad, true);

}, false);
  

И в C#:

  public void acceptClient()
        {
            TcpListener server = null;
            try
            {
                // Set the TcpListener on port 13000.
                Int32 port = 13000;
                IPAddress localAddr = IPAddress.Parse("127.0.0.1");

                // TcpListener server = new TcpListener(port);
                server = new TcpListener(localAddr, port);

                // Start listening for client requests.
                server.Start();

                // Buffer for reading data
                Byte[] bytes = new Byte[256];


                // Enter the listening loop.
                while (true)
                {
                    Console.Write("Waiting for a connection... ");

                    // Perform a blocking call to accept requests.
                    // You could also user server.AcceptSocket() here.
                    TcpClient client = server.AcceptTcpClient();
                    Console.WriteLine("Event was fired!");


                    UserModel um = new UserModel();

                    um.maintainUserModel(); //method uses to maintain user model

                }
            }
            catch (SocketException e)
            {
                Console.WriteLine("SocketException: {0}", e);
            }
            finally
            {
                // Stop listening for new clients.
                server.Stop();
            }

        }
  

Ответ №1:

Какой IP-адрес вы используете в браузере, чтобы перейти на эту страницу? Обратная связь или локальный IP? Должен быть тот же AFAIK.

При использовании адреса обратной связи в C # вам не нужно его искать. Просто используйте IPAddress.Loopback .

кроме этого, с вашим сервером все в порядке.

Дополнительное примечание:

 um.maintainUserModel(); //method uses to maintain user model
  

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

Обновить

Этот скрипт подключается нормально:

 <script type="text/javascript">
    function examplePageLoad(event) {
        if ("WebSocket" in window) {
            var ws = new WebSocket("ws://localhost:13000/");
            ws.onopen = function() {
                alert('Sending');
                ws.send("message to send");
            }
            ws.onmessage = function (evt) { 
                alert('Received: '   evt.data);
            };
            ws.onclose = function() { // websocket is closed. 
            };

            alert('readystate: '   ws.readyState   " for "   ws.URL);
        }
        else
            alert('Not supported');
    }

    if (window.addEventListener) {
        window.addEventListener("load", examplePageLoad, true);
    }
</script>
  

Комментарии:

1. боюсь, все та же проблема

2. попробуйте использовать свой реальный IP-адрес как в браузере, так и на сервере. Попробуйте подключиться к серверу с помощью telnet.

3. когда я записываю IP-адрес обратной связи с портом в браузере, это работает, сервер получает запрос. Просто, когда я вызываю его из скрипта, это не так. Я проверил, событие действительно, при загрузке новой вкладки событие инициируется, но сервер продолжает ожидать подключения

4. Я не уверен в адресе обратной связи. Пожалуйста, используйте свой реальный ip.

5. Я тоже пробовал это :(. Спасибо за вашу помощь, не волнуйтесь. Должно быть, у меня что-то не так в коде javascript