132

ソケットを開いてリッスンする vb.net アプリケーションがあります。

ブラウザで実行されている JavaScript を使用して、このソケットを介してそのアプリケーションと通信する必要があります。つまり、このソケットでリッスンしているアプリがそのデータを取得し、いくつかのリモート呼び出しを使用していくつかのことを行い、さらにデータを取得して、JavaScript が必要とするソケットに戻すことができるように、このソケットでデータを送信する必要があります。ブラウザで読み取って印刷します。

私はsocket.io、websockifyを試しましたが、どれも有用であることが証明されていません.

したがって、私が試みていることは可能ですか?ブラウザで実行されているJavaScriptがTCPソケットに接続してデータを送信し、それをリッスンしてソケットでさらにデータ応答を受け取り、それをブラウザに出力する方法はありますか.

これが可能であれば、どちらが目標を達成するのに役立つかについて、誰かが私を正しい方向に向けることができます.

4

6 に答える 6

65

あなたの問題に関しては、現在、これについては XHR または websockets に依存する必要があります。

現在、一般的なブラウザには、raw ソケットを作成してアクセスできるようにする javascript 用の raw ソケット API が実装されていませんが、JavaScript で raw ソケット API を実装するためのドラフトが進行中です。次のリンクをご覧ください:
http://www.w3.org/TR/raw-sockets/
https://developer.mozilla.org/en-US/docs/Web/API/TCPSocket

Chrome は、「実験的」API で未加工の TCP および UDP ソケットをサポートするようになりました。これらの機能は拡張機能でのみ使用でき、文書化されていますが、現時点では非表示になっています。そうは言っても、一部の開発者は、この 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!");         
    });
});
于 2013-06-27T07:24:53.270 に答える
33

これは、以下に示すように、ナビゲーター インターフェイスを介して可能になります。

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)
    );
  }
);

詳細については、w3.org tcp-udp-sockets のドキュメントで概説されています。

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

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

もう 1 つの方法は、Chrome ソケットを使用することです。

接続の作成

chrome.sockets.tcp.create({}, function(createInfo) {
  chrome.sockets.tcp.connect(createInfo.socketId,
    IP, PORT, onConnectedCallback);
});

データの送信

chrome.sockets.tcp.send(socketId, arrayBuffer, onSentCallback);

データ受信中

chrome.sockets.tcp.onReceive.addListener(function(info) {
  if (info.socketId != socketId)
    return;
  // info.data is an arrayBuffer.
});

使用を試みることもできますHTML5 Web Sockets(これは直接の TCP 通信ではありませんが):

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/

また、サーバーは pywebsocket などの WebSocket サーバーでリッスンしている必要があります。または、Mozillaで概説されているように独自に作成することもできます。

于 2012-09-13T13:53:14.803 に答える
0

あなたが本当に探しているソリューションは、Web ソケットです。ただし、クロムプロジェクトは、直接TCP接続であるいくつかの新しいテクノロジーを開発しましたTCPクロム

于 2012-11-15T05:59:43.780 に答える
0

目的を達成するには、2 つのアプリケーションを作成する必要があります (たとえば、Java または Python のいずれかで)。

  1. クライアントのマシンに配置され、TCP/IP ソケットと WebSocket の両方を処理できる Bridge アプリ。問題の TCP/IP ソケットと対話します。

  2. WebSocket と通信できるサーバー側アプリ (JSP/サーブレット WAR など)。これには、ブラウザからアクセスできる少なくとも 1 つの HTML ページ (必要に応じてサーバー側の処理コードを含む) が含まれます。

このように動作するはずです

  1. Bridge は Web アプリへの WS 接続を開きます (サーバーがクライアントに接続できないため)。
  2. Web アプリは、クライアントに自分自身を識別するように要求します
  3. ブリッジ クライアントは ID 情報をサーバーに送信し、サーバーはブリッジを識別するためにそれを保存します。
    1. ブラウザーで表示可能なページは、JS を使用して WS サーバーに接続します。
    2. 手順 3 を繰り返しますが、JS ベースのページに対してです。
    3. JS ベースのページは、どのブリッジに送信する必要があるかなど、コマンドをサーバーに送信します。
    4. サーバーはコマンドをブリッジに転送します。
    5. ブリッジは TCP/IP ソケットを開き、それと対話します (メッセージを送信し、応答を取得します)。
    6. Bridge は、WS を介してサーバーに応答を送信します。
    7. WS は応答をブラウザ表示可能なページに転送します
    8. JS は応答を処理し、それに応じて反応します
    9. いずれかのクライアントが切断/アンロードされるまで繰り返します

注 1:上記の手順は非常に単純化されており、クライアントが途中で切断された場合や、サーバーがシャットダウン/再起動中であることをクライアントに通知する必要がある場合のエラー処理と keepAlive 要求に関する情報は含まれていません。

注 2:問題の TCP/IP ソケット サーバー (ブリッジが通信する相手) がサーバー アプリと同じマシン上にある場合、必要に応じて、これらのコンポーネントを 1 つにマージできる場合があります。

于 2019-01-29T14:06:06.290 に答える