Показать сообщение отдельно
Старый 07.09.2011, 13:08
dsdbonus вне форума Посмотреть профиль Отправить личное сообщение для dsdbonus Найти все сообщения от dsdbonus
  № 1  
Ответить с цитированием
dsdbonus

Регистрация: Sep 2011
Адрес: http://infinityapps.ru
Сообщений: 36
Attention AS3 клиент + Java сервер считывает при дисконекте сокета

Здравствуйте! Уже и так и так пытался, все равно не понимаю почему не работает. С клиента отправляем данные на сервер, через сокет, сервер молчит и считывает поток, только после того, как закрыть клиент, что бы произошел разрыв соединения. В чем туплю или как делать?

Клиент
Код AS3:
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);
        }
    }
}
Сервер на Java
Код AS3:
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);}
	}
}