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

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 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);}
	}
}

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

Регистрация: Nov 2010
Сообщений: 497
А в this.txt.text хоть один перевод строки есть? BufferedReader считает строкой только то, что кончается на \r, \n или \r\n. Символ 0 концом строки не является. Так что до тех пор, пока перевод строки не будет отправлен (или поток не закончится, что происходит при закрытии сокета), BufferedReader вам ничего не прочитате. Пишите свой правильный ридер, который сообщения по символу 0 разделяет. И кодировку ридерам и принтерам укажите, иначе весело будет.

Старый 07.09.2011, 14:19
t4arty вне форума Посмотреть профиль Отправить личное сообщение для t4arty Найти все сообщения от t4arty
  № 3  
Ответить с цитированием
t4arty

Регистрация: May 2010
Адрес: пространство в положении
Сообщений: 219
и добавте кодировку UTF-8 в BufferedReader. Удачи.

Пс: Можете дополнять перевод строки через спец символы, которые тоже будут отправляться. А вообще readLine() не лушный вариант ;( (сугобо мое мнение)

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

Регистрация: Sep 2011
Адрес: http://infinityapps.ru
Сообщений: 36
Спасибо большое ребята))

Заменил на:
Код AS3:
is = new BufferedReader(new InputStreamReader(s.getInputStream(), "UTF-8")); 
os = new PrintStream(s.getOutputStream(), true, "UTF-8");
И возникло нечто не понятное, добавил после вывода на консоль еще ответ по сокету флешке
Код AS3:
os.println(str+" = ееееввв kkkk");
Но почему-то на пример присылаю строку "1111", не чего не происходит, затем шлю "2222" в ответ приходит "1111 = ееееввв kkkk", затем шлю "3333" и приходит "2222 = ееееввв kkkk". Почему такая задержка? Как сделать без неё?

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

Теги
AS3 , client , java , server
Опции темы
Опции просмотра

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

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


 


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


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