Здравствуйте! Уже и так и так пытался, все равно не понимаю почему не работает. С клиента отправляем данные на сервер, через сокет, сервер молчит и считывает поток, только после того, как закрыть клиент, что бы произошел разрыв соединения. В чем туплю или как делать?
Клиент
Код 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);}
}
}