подключение к локальному серверу в приложении c # из расширения Firefox - PullRequest
1 голос
/ 18 апреля 2011

Я использую расширение 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 Ответ

1 голос
/ 18 апреля 2011

Какой IP-адрес вы используете в браузере для перехода на эту страницу? Loopback или локальный 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...