Подключение к TCP Socket из браузера с помощью javascript
У меня есть приложение vb.net, которое открывает сокет и прослушивает его.
Мне нужно связаться через этот сокет с этим приложением, используя javascript, запущенный в браузере. То есть мне нужно отправить некоторые данные в этот сокет, чтобы приложение, которое прослушивает этот сокет, может принимать эти данные, делать некоторые вещи, используя некоторые удаленные вызовы, и получать еще несколько данных и помещать их обратно в сокет, который мне нужен javascript. прочитайте и распечатайте его в браузере.
Ive try, socket.io, websockify, но ни один из них не оказался полезным.
Следовательно, вопрос, что я пытаюсь даже сделать возможным? Есть ли способ, с помощью которого javascript, работающий в браузере, может подключаться к сокету tcp и отправлять некоторые данные и прослушивать его для получения некоторого ответа на данные в сокете и печатать его в браузере.
Если это возможно, кто-то может указать мне в правильном направлении, чтобы помочь мне установить цель.
Ответы
Ответ 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):
-
Приложение Bridge, которое находится на клиентском компьютере и может работать как с сокетами TCP/IP, так и с WebSockets. Он будет взаимодействовать с рассматриваемым сокетом TCP/IP.
-
Серверное приложение (например, JSP/Servlet WAR), которое может общаться через WebSockets. Он включает в себя по крайней мере одну HTML-страницу (включая код обработки на стороне сервера, если это необходимо) для доступа через браузер.
Это должно работать так
- Bridge откроет WS-соединение с веб-приложением (поскольку сервер не может подключиться к клиенту).
- Веб-приложение попросит клиента идентифицировать себя
- Клиент моста отправляет некоторую идентификационную информацию на сервер, который хранит ее, чтобы идентифицировать мост.
- Страница для просмотра в браузере подключается к серверу WS с помощью JS.
- Повторите шаг 3, но для страницы на основе JS
- Страница на основе JS отправляет команду на сервер, в том числе на какой мост он должен идти.
- Сервер перенаправляет команду на мост.
- Мост открывает сокет TCP/IP и взаимодействует с ним (отправляет сообщение, получает ответ).
- Мост отправляет ответ на сервер через WS
- WS пересылает ответ на страницу для просмотра в браузере
- JS обрабатывает ответ и реагирует соответственно
- Повторяйте, пока один из клиентов не отключится/не выгружается
Примечание 1. Вышеприведенные шаги являются огромным упрощением и не включают информацию об обработке ошибок и запросах keepAlive в случае, если клиент преждевременно отключается или сервер должен сообщить клиентам, что он выключается/перезапускается.
Примечание 2: В зависимости от ваших потребностей, возможно объединить эти компоненты в один, если рассматриваемый сервер сокетов TCP/IP (с которым соединяется мост) находится на той же машине, что и серверное приложение.