|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Sep 2011
Адрес: http://infinityapps.ru
Сообщений: 36
|
AS3 клиент + Java сервер считывает при дисконекте сокета
Здравствуйте! Уже и так и так пытался, все равно не понимаю почему не работает. С клиента отправляем данные на сервер, через сокет, сервер молчит и считывает поток, только после того, как закрыть клиент, что бы произошел разрыв соединения. В чем туплю или как делать?
Клиент package main { import flash.display.Sprite; import flash.events.*; import flash.net.XMLSocket; import flash.system.Security; public class General extends Sprite { private var hostName:String = "127.0.0.1"; private var port:uint = 12700; private var portPolicy:uint = 15781; private var socket:XMLSocket; public function General() { Security.loadPolicyFile("xmlsocket://"+hostName+":"+portPolicy); socket = new XMLSocket(); configureListeners(socket); if (hostName && port) { socket.connect(hostName, port); } this.but.addEventListener(MouseEvent.CLICK, onBut); } public function send(data:Object):void { socket.send(data); } private function onBut(event:Event):void { send(new XML(this.txt.text)); } private function configureListeners(dispatcher:IEventDispatcher):void { dispatcher.addEventListener(Event.CLOSE, closeHandler); dispatcher.addEventListener(Event.CONNECT, connectHandler); dispatcher.addEventListener(DataEvent.DATA, dataHandler); dispatcher.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); dispatcher.addEventListener(ProgressEvent.PROGRESS, progressHandler); dispatcher.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); } private function closeHandler(event:Event):void { trace("closeHandler: " + event); } private function connectHandler(event:Event):void { trace("connectHandler: " + event); } private function dataHandler(event:DataEvent):void { trace("dataHandler: " + event); trace( event.data ); var response:XML = new XML( event.data ); trace( response.test.@success ); } private function ioErrorHandler(event:IOErrorEvent):void { trace("ioErrorHandler: " + event); } private function progressHandler(event:ProgressEvent):void { trace("progressHandler loaded:" + event.bytesLoaded + " total: " + event.bytesTotal); } private function securityErrorHandler(event:SecurityErrorEvent):void { trace("securityErrorHandler: " + event); } } } package ru.gp.general; import java.io.*; import java.net.*; public class GPServer { private static final int PORT_SERVER = 12700; private int mNumCon = 0; public static void main(String[] args) { try { ServerSocket server = new ServerSocket(PORT_SERVER, 0, InetAddress.getByName("localhost")); System.out.print("Server is start...\r"); while(true) { new Player(server.accept()); } } catch(Exception e) {System.out.print("Init error "+e);} } } package ru.gp.general; import java.io.*; import java.net.*; public class Player extends Thread { public Socket s; private BufferedReader is; private PrintStream os; public Player(Socket p1) { s = p1; setDaemon(true); setPriority(NORM_PRIORITY); start(); } public void run() { try { is = new BufferedReader(new InputStreamReader(s.getInputStream())); os = new PrintStream(s.getOutputStream()); boolean done = false; while (!done) { String str = is.readLine(); if (str == null) { done = true; } else { System.out.print("Echo: " + str + "\r"); if(str.trim().equals("EXIT")) { done = true; } } s.close(); } } catch(Exception e) {System.out.print("Init error "+e);} } } |
|
|||||
Регистрация: Nov 2010
Сообщений: 497
|
А в this.txt.text хоть один перевод строки есть? BufferedReader считает строкой только то, что кончается на \r, \n или \r\n. Символ 0 концом строки не является. Так что до тех пор, пока перевод строки не будет отправлен (или поток не закончится, что происходит при закрытии сокета), BufferedReader вам ничего не прочитате. Пишите свой правильный ридер, который сообщения по символу 0 разделяет. И кодировку ридерам и принтерам укажите, иначе весело будет.
|
|
|||||
Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
|
и добавте кодировку UTF-8 в BufferedReader. Удачи.
Пс: Можете дополнять перевод строки через спец символы, которые тоже будут отправляться. А вообще readLine() не лушный вариант ;( (сугобо мое мнение) |
|
|||||
Регистрация: Sep 2011
Адрес: http://infinityapps.ru
Сообщений: 36
|
Спасибо большое ребята))
Заменил на: is = new BufferedReader(new InputStreamReader(s.getInputStream(), "UTF-8")); os = new PrintStream(s.getOutputStream(), true, "UTF-8"); Но почему-то на пример присылаю строку "1111", не чего не происходит, затем шлю "2222" в ответ приходит "1111 = ееееввв kkkk", затем шлю "3333" и приходит "2222 = ееееввв kkkk". Почему такая задержка? Как сделать без неё? |
Часовой пояс GMT +4, время: 20:44. |
|
« Предыдущая тема | Следующая тема » |
Теги |
AS3 , client , java , server |
|
|