Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > Серверные технологии и Flash

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 24.08.2008, 15:57
VovkaMorkovka вне форума Посмотреть профиль Отправить личное сообщение для VovkaMorkovka Найти все сообщения от VovkaMorkovka
  № 1  
Ответить с цитированием
VovkaMorkovka

Регистрация: Apr 2006
Сообщений: 421
По умолчанию И вновь о сокетах и политике безопасности

Всем привет, пытаюсь достучаться до сокета из локально запущенной флешки, для этого использую вот такой код на java со стороны сервера и AS 3.0 со стороны клиента

java

Код:
package org.editor.sockets;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public final class SocketServer {
	private static final int PORT = 8080;
	private static ServerSocket SERVER_SOCKET = null;
	private static SocketServer INSTANCE = null;
	private static String CROSSDOMAIN_XML = "<cross-domain-policy>"
			+ "<allow-access-from domain=\"*\" to-ports=\"" + PORT + "\"/>" +

			"</cross-domain-policy>";
	Runnable _socketListenerProcessor;

	public static SocketServer getInstance() {
		if (INSTANCE == null) {
			INSTANCE = new SocketServer();

		}
		return INSTANCE;
	}

	/**
	 * Init server socket.
	 * 
	 * @author vovkamorkovka
	 */
	private boolean initServer() {
		try {
			SERVER_SOCKET = new ServerSocket(PORT);
			
			return true;
		} catch (IOException e) {

			e.printStackTrace();
			return false;
		}
	}

	private SocketServer() {
		initServer();

		_socketListenerProcessor = new Runnable() {

			@Override
			public void run() {
				try {

					// Блокирует до тех пор, пока не возникнет соединение:

					Socket clientSocket = SERVER_SOCKET.accept();
					// Вывод автоматически выталкивается из буфера
					// PrintWriter'ом
					System.out.println("accept socket");
					PrintWriter out =

					new PrintWriter(

					new BufferedWriter(

					new OutputStreamWriter(

					clientSocket.getOutputStream())), true);
					

					//System.out.println("accept socket:" + CROSSDOMAIN_XML);
					try {

						System.out.println(

						"Connection accepted: " + clientSocket);

						BufferedReader in =

						new BufferedReader(

						new InputStreamReader(

						clientSocket.getInputStream()));

						// Вывод автоматически выталкивается из буфера
						// PrintWriter'ом

						while (true) {

							String str = in.readLine();
							if (str.contains("policy-file-request")) {
								out.println(CROSSDOMAIN_XML+"\r\n");
								out.flush();
								System.out.println("try to load policy");
								
							} else {
								if (str.equals("END"))
									break;

								System.out.println("Echoing: " + str);

								out.println(str);
							}

						}

						// Всегда закрываем два сокета...

					} finally {

						System.out.println("closing...");

						clientSocket.close();

					}

				} catch (IOException e1) {

				} finally {

					try {
						SERVER_SOCKET.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}

				}

			}

		};

		_socketListenerProcessor.run();

	}

	public static void main(String args[]) {
		SocketServer.getInstance();

		while (true) {

		}
	}

}
И AS 3.0

Код:
     package org.editor.sockets.example {
	import flash.display.SimpleButton;
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.net.XMLSocket;
	import flash.system.Security;
	import flash.text.TextField;		

	/**
	 * @author vovkamorkovka
	 */
	public class SocketsExample extends Sprite {
		private var _sendMessageBtn : SimpleButton = null;
		private var _connectBtn : SimpleButton = null;
		private var _socket : XMLSocket = null;
		private var _inputText : TextField;

		public function SocketsExample() {
			
			Security.loadPolicyFile("localhost:8080");
			_sendMessageBtn = this["sendMessageBtn"] as SimpleButton;
			
			_connectBtn = this["connectBtn"] as SimpleButton;
			_inputText = this["logText"] as TextField;
					
			_sendMessageBtn.addEventListener(MouseEvent.CLICK, sendMessage);
			_connectBtn.addEventListener(MouseEvent.CLICK, connect);
		}

		private function connect(event : MouseEvent) : void {
			_socket = new XMLSocket();
			
			try {
				_socket.connect("localhost", 8080);
			}catch(e : Error) {
				_inputText.appendText("connect:" + e.toString() + "\n");
			}
		}

		private function sendMessage(event : MouseEvent) : void {
			
			
			if (_socket == null) {
				_inputText.appendText("send message, socket have not bin created\n");
				return;
			}
			try {
				_socket.send("salo salo\n");
			}catch(e : Error) {
				_inputText.appendText("send message," + e.toString() + "\n");
			}
		}
	}
}
Проблема в следующем: флеш не присылает сокету запрос crossdomain.xml
Причем не присылает ни в тестовом режиме, ни в режиме локально запущенного
Вопроса как всегда два: кто виноват и что делать

p.s. Искал на форуме, много схожих тем, но конкретно этот вопрос не освещается

Создать новую тему   Часовой пояс GMT +4, время: 10:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 10:37.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.