使用套接字进行数据传输。 Java& Firefox扩展 [英] Data transfer using sockets. Java & Firefox extension

查看:144
本文介绍了使用套接字进行数据传输。 Java& Firefox扩展的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我尝试在JavaScript(服务器)中实现Java(客户端)和Firefox扩展程序之间的数据传输。我无法使用一个套接字发送和接收。请帮我解决这个问题。现在,客户端从服务器获取消息,但给它一个空白的消息。



客户端(Java):

  import java.io.BufferedReader; 
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketOptions;

public class JustForTest {

/ **
* @param args命令行
*
*连接到FF插件(服务器)。发送URL并等待innerHTML
* /
public static void main(String [] args)throws IOException {
String messageFromServer;
字符串messageToServer =http://google.pl/;

Socket clientSocket = new Socket(localhost,8888);

尝试{
System.out.println(Socket is connected to 127.0.0.1:8888);
//将URL发送到Firefox插件
PrintWriter out = new PrintWriter(clientSocket.getOutputStream(),true);
out.write(messageToServer);
InputStream inStream = clientSocket.getInputStream();
//正在等待来自Firefox插件的回答
BufferedReader reader = new BufferedReader(new InputStreamReader(inStream));
System.out.println(reader.readLine());
$ b $ catch(IOException e){
e.printStackTrace();
}如果(clientSocket!= null&& clientSocket.isConnected()){
try {
clientSocket.close();
} catch(IOException e){
e.printStackTrace();
System.out.print(e);




$ b code $


Firefox扩展(JavaScript):

pre $ var BeansServer = new function(){

/ *
*听取连接。传送
* /
var listener = {
onSocketAccepted:function(serverSocket,transport){
addSpan(Accepted connection on+ transport.host +:+ transport。港口);
var input = transport.openInputStream(Ci.nsITransport.OPEN_BLOCKING,0,0); // QueryInterface(Ci.nsIAsyncInputStream);
var output = transport.openOutputStream(Ci.nsITransport.OPEN_BLOCKING,0,0);
var sin = Cc [@ mozilla.org/scriptableinputstream;1\"].createInstance(Ci.nsIScriptableInputStream);

try {
sin.init(input);
var readBytes = sin.available();

var request ='';
request = sin.read(readBytes);
addSpan('Received:'+ request);

getUrl(request);

output.write(yes,yes.length);
output.flush();
}
finally {
sin.close();
input.close();
output.close();




$ Main

this.start = function(){
var serverSocket = cc [@ mozilla.org/network/server-socket;1\"].createInstance(Ci.nsIServerSocket);
serverSocket.init(8888,true,5);
addSpan(打开的套接字+ serverSocket.port);
serverSocket.asyncListen(listener);
};

/ *
*在浏览器中打开页面。检查加载页面的HTML状态
* /
function getUrl(url){
var xmlhttp = getXmlHttp();
xmlhttp.open('GET','http://google.pl',true);
(xmlhttp.status == 200){
alert(xmlhttp.status) ;
}
}
};
xmlhttp.send(null);
}

函数getXmlHttp(){
var xmlhttp;
尝试{
xmlhttp = new ActiveXObject(Msxml2.XMLHTTP);
catch(e){
try {
xmlhttp = new ActiveXObject(Microsoft.XMLHTTP);
} catch(E){
xmlhttp = false;


if(!xmlhttp&& typeof XMLHttpRequest!='undefined'){
xmlhttp = new XMLHttpRequest();
}
return xmlhttp;


函数getBrowser(){
if(!gBrowser)
gBrowser = document.getElementById(content);
返回gBrowser;

$ b $ * b $ b *在浏览器的页面上显示一个字符串
* /
函数addSpan(content2){
var mySpan = content.document.createElement('span');
mySpan.innerHTML = content2 +'< br />';
content.document.body.appendChild(mySpan);



$ div $解析方案

需要在Java中关闭 out

  out.close(); 


I am trying to implement a data transfer between programs in Java (Client) and Firefox extension in JavaScript (Server). I can't send and receive using one socket only. Help me to solve this problem, please. Right now the client gets a message from the server, but gives it a blank message.

Client (Java):

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketOptions;

public class JustForTest {

    /**
     * @param args the command line 
     * 
     * Connect to FF Plugin (Server). Send URL and waiting for innerHTML
     */
    public static void main(String[] args) throws IOException {
        String messageFromServer;
        String messageToServer = "http://google.pl/";

        Socket clientSocket = new Socket("localhost", 8888);

        try {
            System.out.println("Socket is connected to 127.0.0.1:8888");
            // Send URL to Firefox Plugin
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            out.write(messageToServer);
            InputStream inStream = clientSocket.getInputStream();
            // Is waiting for answer from Firefox Plugin
            BufferedReader reader = new BufferedReader(new InputStreamReader(inStream));
            System.out.println(reader.readLine());

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (clientSocket != null && clientSocket.isConnected()) {
                try {
                    clientSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                    System.out.print(e);
                }
            }
        }
    }
}

Firefox extension (JavaScript):

    var BeansServer = new function () {

    /*
     * Listen for connections. Transmit
     */
    var listener = {
        onSocketAccepted: function(serverSocket, transport) {
            addSpan("Accepted connection on " + transport.host + ":" + transport.port);
            var input = transport.openInputStream(Ci.nsITransport.OPEN_BLOCKING, 0, 0);//.QueryInterface(Ci.nsIAsyncInputStream);
            var output = transport.openOutputStream(Ci.nsITransport.OPEN_BLOCKING, 0, 0);
            var sin = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);

            try{
                sin.init(input);
                var readBytes = sin.available();

                var request = '';
                request = sin.read(readBytes);
                addSpan('Received: ' + request);

                getUrl(request);

                output.write("yes", "yes".length);
                output.flush();
            }
            finally{
                sin.close();
                input.close();
                output.close();
            }
        }
    }

    /*
     * Main
     */
    this.start = function() {
        var serverSocket = Cc["@mozilla.org/network/server-socket;1"].createInstance(Ci.nsIServerSocket);
        serverSocket.init(8888, true, 5);
        addSpan("Opened socket on " + serverSocket.port);
        serverSocket.asyncListen(listener);
    };

    /*
     * Opening the page in the browser. Checks the HTML status of the loaded page
     */
    function getUrl(url){
        var xmlhttp = getXmlHttp();
        xmlhttp.open('GET', 'http://google.pl', true);
        xmlhttp.onreadystatechange = function() {
            if (xmlhttp.readyState == 4) {
                if(xmlhttp.status == 200) {
                    alert(xmlhttp.status);
                }
            }
        };
        xmlhttp.send(null);
    }

    function getXmlHttp(){
        var xmlhttp;
        try {
            xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (E) {
                xmlhttp = false;
            }
        }
        if (!xmlhttp && typeof XMLHttpRequest!='undefined') {
            xmlhttp = new XMLHttpRequest();
        }
        return xmlhttp;
    }

    function getBrowser(){
        if (!gBrowser)
            gBrowser = document.getElementById("content");
        return gBrowser;
    }

    /*
     * Displays a string on a page in the browser
     */
    function addSpan(content2) {
        var mySpan = content.document.createElement('span');
        mySpan.innerHTML = content2 + '<br/>';
        content.document.body.appendChild(mySpan);
    }
}

解决方案

Need to close the out in Java.

out.close();

这篇关于使用套接字进行数据传输。 Java&amp; Firefox扩展的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆