Подтвердить что ты не робот

Подключение к TCP Socket из браузера с помощью javascript

У меня есть приложение vb.net, которое открывает сокет и прослушивает его.

Мне нужно связаться через этот сокет с этим приложением, используя javascript, запущенный в браузере. То есть мне нужно отправить некоторые данные в этот сокет, чтобы приложение, которое прослушивает этот сокет, может принимать эти данные, делать некоторые вещи, используя некоторые удаленные вызовы, и получать еще несколько данных и помещать их обратно в сокет, который мне нужен javascript. прочитайте и распечатайте его в браузере.

Ive try, socket.io, websockify, но ни один из них не оказался полезным.

Следовательно, вопрос, что я пытаюсь даже сделать возможным? Есть ли способ, с помощью которого javascript, работающий в браузере, может подключаться к сокету tcp и отправлять некоторые данные и прослушивать его для получения некоторого ответа на данные в сокете и печатать его в браузере.

Если это возможно, кто-то может указать мне в правильном направлении, чтобы помочь мне установить цель.

4b9b3361

Ответ 1

Что касается вашей проблемы, в настоящее время вам придется зависеть от XHR или веб-узлов для этого.

В настоящее время ни один из популярных браузеров не реализовал какие-либо такие сырые сокеты api для javascript, которые позволяют создавать и получать доступ к сырым сокетам, но проект для реализации raw сокетов api в JavaScript находится в процессе. Посмотрите на эти ссылки:
http://www.w3.org/TR/raw-sockets/

https://developer.mozilla.org/en-US/docs/Web/API/TCPSocket

У Chrome теперь есть поддержка сырых TCP и UDP-сокетов в своих "экспериментальных API". Эти функции доступны только для расширений и, хотя они задокументированы, на данный момент скрыты. Сказав это, некоторые разработчики уже создают интересные проекты, такие как этот IRC-клиент.

Чтобы получить доступ к этому API, вам нужно включить флажок эксперимента в манифесте расширений. Использование сокетов довольно просто, например:

chrome.experimental.socket.create('tcp', '127.0.0.1', 8080, function(socketInfo) {
  chrome.experimental.socket.connect(socketInfo.socketId, function (result) {
        chrome.experimental.socket.write(socketInfo.socketId, "Hello, world!");         
    });
});

Ответ 2

Вы можете использовать HTML5 Web Sockets:

var connection = new WebSocket('ws://IPAddress:Port');

connection.onopen = function () {
  connection.send('Ping'); // Send the message 'Ping' to the server
};

http://www.html5rocks.com/en/tutorials/websockets/basics/

Ваш сервер также должен прослушиваться с сервера WebSocket, такого как pywebsocket, иначе вы можете написать свой собственный, как описано в Mozilla

Дополнительно:

Обновление: от проекта W3C в январе 2016 года:

Это будет возможно через интерфейс навигатора, как показано ниже:

http://raw-sockets.sysapps.org/#interface-tcpsocket

https://www.w3.org/TR/tcp-udp-sockets/

navigator.tcpPermission.requestPermission({remoteAddress:"127.0.0.1", remotePort:6789}).then(
  () => {
    // Permission was granted
    // Create a new TCP client socket and connect to remote host
    var mySocket = new TCPSocket("127.0.0.1", 6789);

    // Send data to server
    mySocket.writeable.write("Hello World").then(
        () => {

            // Data sent sucessfully, wait for response
            console.log("Data has been sent to server");
            mySocket.readable.getReader().read().then(
                ({ value, done }) => {
                    if (!done) {
                        // Response received, log it:
                        console.log("Data received from server:" + value);
                    }

                    // Close the TCP connection
                    mySocket.close();
                }
            );
        },
        e => console.error("Sending error: ", e);
    );

Ответ 3

См. jsocket. Не использовал его сам. Прошло более 3 лет с момента последнего обновления (по состоянию на 26/6/2014).

* Использует flash: (

Из документация:

<script type='text/javascript'>
    // Host we are connecting to
    var host = 'localhost'; 
    // Port we are connecting on
    var port = 3000;

    var socket = new jSocket();

    // When the socket is added the to document 
    socket.onReady = function(){
            socket.connect(host, port);             
    }

    // Connection attempt finished
    socket.onConnect = function(success, msg){
            if(success){
                    // Send something to the socket
                    socket.write('Hello world');            
            }else{
                    alert('Connection to the server could not be estabilished: ' + msg);            
            }       
    }
    socket.onData = function(data){
            alert('Received from socket: '+data);   
    }

    // Setup our socket in the div with the id="socket"
    socket.setup('mySocket');       
</script>

Ответ 4

Проект ws2s направлен на то, чтобы принести сокет для js на стороне браузера Это сервер веб-сокетов, который преобразует веб-сокет в сокет.

принципиальная схема ws2s

enter image description here

Пример кода:

var socket = new WS2S("wss://ws2s.feling.io/").newSocket()

socket.onReady = () => {
  socket.connect("feling.io", 80)
  socket.send("GET / HTTP/1.1\r\nHost: feling.io\r\nConnection: close\r\n\r\n")
}

socket.onRecv = (data) => {
  console.log('onRecv', data)
}

Ответ 5

Решение, которое вы действительно ищете, это веб-сокеты. Однако в проекте хром были разработаны некоторые новые технологии, которые являются прямыми TCP-соединениями TCP chromium

Ответ 6

Чтобы достичь желаемого, вам нужно написать два приложения (например, на Java или Python):

  1. Приложение Bridge, которое находится на клиентском компьютере и может работать как с сокетами TCP/IP, так и с WebSockets. Он будет взаимодействовать с рассматриваемым сокетом TCP/IP.

  2. Серверное приложение (например, JSP/Servlet WAR), которое может общаться через WebSockets. Он включает в себя по крайней мере одну HTML-страницу (включая код обработки на стороне сервера, если это необходимо) для доступа через браузер.

Это должно работать так

  1. Bridge откроет WS-соединение с веб-приложением (поскольку сервер не может подключиться к клиенту).
  2. Веб-приложение попросит клиента идентифицировать себя
  3. Клиент моста отправляет некоторую идентификационную информацию на сервер, который хранит ее, чтобы идентифицировать мост.
    1. Страница для просмотра в браузере подключается к серверу WS с помощью JS.
    2. Повторите шаг 3, но для страницы на основе JS
    3. Страница на основе JS отправляет команду на сервер, в том числе на какой мост он должен идти.
    4. Сервер перенаправляет команду на мост.
    5. Мост открывает сокет TCP/IP и взаимодействует с ним (отправляет сообщение, получает ответ).
    6. Мост отправляет ответ на сервер через WS
    7. WS пересылает ответ на страницу для просмотра в браузере
    8. JS обрабатывает ответ и реагирует соответственно
    9. Повторяйте, пока один из клиентов не отключится/не выгружается

Примечание 1. Вышеприведенные шаги являются огромным упрощением и не включают информацию об обработке ошибок и запросах keepAlive в случае, если клиент преждевременно отключается или сервер должен сообщить клиентам, что он выключается/перезапускается.

Примечание 2: В зависимости от ваших потребностей, возможно объединить эти компоненты в один, если рассматриваемый сервер сокетов TCP/IP (с которым соединяется мост) находится на той же машине, что и серверное приложение.