2015-09-14 4 views
1

Я пытаюсь отправить некоторые данные из Firefox в приложение для Java-приложений. Так что мой класс java работает как сервер, а скрипт Firefox работает как клиент. Когда я тестирую его, используя другой класс java, который является client.java, данные успешно отправлены в server.java, как когда-либо, когда я использую этот сценарий firefox для отправки данных, он фактически подключается к серверу .but send("text"); не работает в реальном времени. данные, когда я закрываю сокет socket.close();. но я знаю, что нет проблем с кодом server.java.данные, отправленные firefox tcp socket.send() не могут восстановить до закрытия сокета

это не работает

setTimeout(function(){socket.send("i'm firefox");},5000); // because socket isn't closed yet 

эту работу

setTimeout(function(){socket.send("i'm firefox");},5000); 
setTimeout(function(){socket.close();},6000); 

, но я действительно не хочу, чтобы закрыть сокет, потому что я хочу, чтобы отправить много данных один за другим.

здесь полный код протестирован на блокноте [-browser]

var tcpSocket = Cc["@mozilla.org/tcp-socket;1"].createInstance(Ci.nsIDOMTCPSocket); 
var socket = tcpSocket.open("127.0.0.1", 5000); 

setTimeout(function(){socket.send("i'm firefox");},5000); 
//setTimeout(function(){socket.close();},8000);// i'm firefox text retrieve by server when run this line/when close the socket. 

я думаю, что Java-код не important.but here это.

Я спрашиваю, почему мне нужно закрыть сокет для отправки данных? и как я могу отправить данные без закрытия сокета?


обновление

i made a Gif, чтобы показать мою проблему здесь вы можете увидеть данные не отправлять в режиме реального времени, но когда сокет закрыт продувают все данные.

enter image description here

ответ

2

Это на самом деле работает. Ваши данные принимаются, но вы в настоящее время ждете новой линии для печати принятых сообщений:

while ((inputLine = in.readLine()) != null) { 
    System.out.println("Server: " + inputLine); 
    out.println(inputLine); 

    if (inputLine.equals("Bye.")) { 
     break; 
    } 
} 

который в настоящее время происходит только при закрытии сокета. Просто добавьте новую строку в конце своих сообщений, и она будет работать, как ожидалось:

var tcpSocket = Cc["@mozilla.org/tcp-socket;1"].createInstance(Ci.nsIDOMTCPSocket); 
var socket = tcpSocket.open("127.0.0.1", 5000); 

function sendMessage(msg){ 
    socket.send(msg + "\n"); 
} 

setTimeout(function(){ 
    sendMessage("hi mark"); 
},3000); 

setTimeout(function(){ 
    sendMessage("hi johnny"); 
},5000); 
+0

ohh Большое вам спасибо. Я никогда не думал об этом. Я думал что-то не так на моем сценарии аддона. –

+0

Я тоже не видел это :) :) рад помочь – cviejo

 Смежные вопросы

  • Нет связанных вопросов^_^