Показать сообщение отдельно
Старый 29.08.2011, 19:05
Try_in_flash вне форума Посмотреть профиль Отправить личное сообщение для Try_in_flash Найти все сообщения от Try_in_flash
  № 4  
Ответить с цитированием
Try_in_flash

Регистрация: Aug 2011
Сообщений: 4
Я попробовал так сделать, и кое-что получилось. На 843 порт, создать сервер-политики не удалось, пришлось создать на 2525, и модифицировать для него as3.
Получилось отправлять данные на сервер, а вот получить что-либо не выходит ((
Вот модифицированный код:
Джава:
Код:
import java.net.*;
import java.io.*;

class FlashSecurityServer
{
    public static void main(String[] args)
    {
        try
        {
            System.out.println("-> Security server started...");
            ServerSocket server = new ServerSocket(2525);
            Socket client;
            DataOutputStream out;
            DataInputStream in;
            
            // Reading crossdomain.xml
            FileInputStream xmlFile = new FileInputStream("crossdomain.xml");
            int xmlBytesCount = xmlFile.available();
            
            byte[] xmlBytes = new byte[xmlBytesCount + 1];
            xmlFile.read(xmlBytes, 0, xmlBytesCount);
            xmlBytes[xmlBytesCount] = 0;
            xmlFile.close();
            
            byte[] policyRequest = new byte[23];
            
//            for (;;)
//          {
                client = server.accept();
                out = new DataOutputStream(client.getOutputStream());
                in = new DataInputStream(client.getInputStream());
                
                in.read(policyRequest, 0, 23);
                
                out.write(xmlBytes, 0, xmlBytesCount + 1);
                out.flush();
                System.out.println(":: FSS :: Policy sended to " + client.toString());
                client.close();
//        }
                
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        
        int port = 8080; // случайный порт (может быть любое число от 1025 до 65535)
        SimpleServer(port);
       
    }
    static ServerSocket socket; 
    static Socket incoming; 
    static BufferedReader readerIn; 
    static PrintStream printOut; 
 
    private static void SimpleServer(int port) 
    { 
        System.out.println(">> Starting SimpleServer"); 
        try 
        { 
            socket = new ServerSocket(port); 
            incoming = socket.accept(); 
            readerIn = new BufferedReader(new InputStreamReader(incoming.getInputStream())); 
            printOut = new PrintStream(incoming.getOutputStream()); 
            out("Enter EXIT to exit.\r"); 
            boolean done = false; 
            while (!done) 
            { 
                String str = readerIn.readLine(); 
                if (str == null) 
                { 
                    done = true; 
                } 
                else 
                { 
                    out("Echo: " + str + "\r"); 
                    if(str.trim().equals("EXIT")) 
                    { 
                        done = true; 
                    } 
                } 
                 
            } 
            incoming.close();
        } 
        catch (Exception e) 
        { 
            System.out.println(e); 
        } 
    } 
 
    private static void out(String str) 
    { 
    	System.out.println(str);
        printOut.println(str); 
        printOut.flush();
         
    } 
}
ас3:
Код AS3:
package MultiPlayer
{
	import flash.display.Sprite;
	import flash.events.*;
	import flash.net.*;
	import flash.system.Security;
	import flash.text.TextField;
 
	public class MultiPlayer extends Sprite
	{
		private var port:Number = 8080;
		private var socket:XMLSocket = new XMLSocket("127.0.0.1",port);
		private var textField:TextField = new TextField();
		public function MultiPlayer()
		{
			textField.height = 300;
			textField.width = 600;
			textField.x = 100;
			textField.y = 100;
			textField.backgroundColor = 0x00ff00;
			textField.background = true;
			this.addChild(textField);
			socket.connect("127.0.0.1",2525);
			try
			{
			Security.loadPolicyFile("xmlsocket://127.0.0.1:2525");
			}
			catch(e:Error)
			{
				textField.appendText("\n no policy find \n");
			}
			configureListeners(socket);
			socket.connect("127.0.0.1",port);
 
		} 
 
		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 {
			textField.appendText("\ncloseHandler: \n" + event);
		}
 
		private function connectHandler(event:Event):void {
			textField.appendText("\nconnectHandler: \n" + event);
			socket.send("test\n");
			textField.appendText("data sending...\n");
		}
 
		private function dataHandler(event:DataEvent):void {
			textField.appendText("\ndataHandler: \n" + event);
		}
 
		private function ioErrorHandler(event:IOErrorEvent):void {
			textField.appendText("\nioErrorHandler: \n" + event);
		}
 
		private function progressHandler(event:ProgressEvent):void {
			textField.appendText("\nprogressHandler loaded:" + event.bytesLoaded + " total: \n" + event.bytesTotal);
		}
 
		private function securityErrorHandler(event:SecurityErrorEvent):void {
			textField.appendText("\nsecurityErrorHandler: \n" + event);
		}
 
	}
}
как видно по коду, мы в ас3, должны получать сообщения:
Enter EXIT to exit.\r и "Echo: test\r"
Они оба отображаются в консоли джавы, но не передаются в ас3.

Добавлено через 15 часов 35 минут
Спасибо, bav, код очень сильно помог в преодолении данной проблемы. А не отсылалось обратно сообщения, из-за того, что java не добавляет вконец строки нулевой байт. Если сделать это вручную, все работает =)
Код:
out("Echo: " + str + (char)0);