我試圖在Java(客戶端)和JavaScript擴展(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 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擴展(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);
}
}
你能提供你正在得到的輸出嗎?什麼顯示在瀏覽器中? – beny23
[複選標記]:http://imageshack.us/photo/my-images/196/84399304.jpg/ Firefox [複選標記]:http://imageshack.us/photo/my-images/9/94945118.jpg/ SocketSniff – SEMA
@SEMA你能做到這些嗎?如果有,請提供您的解決方案 – Samrat