Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > ActionScript 3 > клиент не принимает данные с сервера (сокеты )


Автор: freeclim 22.6.2013, 11:07
ДВС! 
есть сокет сервер, написанный  на джаве, клиент написан на ActionScript. Вначале клиент отправляет серверу число (это работает), сервер обратно возвращает клиенту строку, которую он как бы отсылает, но клиент не может ее получить. Подскажите, пожалуйста, что не так) очень  благодарна заранее. 

Вот мой сервер, который на джаве 

Код

public class Server {
    public static void main(String[] args)    {
        int port = 6666; 
        try {

            ServerSocket ss = new ServerSocket(port); 
            System.out.println("Waiting...");

            ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

            ProgramLogic programLogic = context.getBean("programLogic", ProgramLogic.class);  // запускаю основную логику программы
            ForConnectServer forConnectServer=context.getBean("forConnectServer",ForConnectServer.class);
            
            Socket socket = ss.accept(); 
       
            InputStream sin = socket.getInputStream();
            OutputStream sout = socket.getOutputStream();

            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout);


            forConnectServer.scheduleWork();//логика основной программы

            String line = null;
            while(true) {

                int id = in.readInt();

                System.out.println("from client id  = "+ id);
                String str = "hello, "+id;

                out.writeUTF(str);

                out.flush();
                System.out.println("Waiting for the next line...");
                System.out.println();
            }
        } catch(Exception x) { x.printStackTrace(); }
    }
}


а это клиент на ActionScript
Код


public class Client extends Sprite {
    private var socket:Socket;
    public function Main():void {

        const serverPort:int = 6666; /
        const address:String = "127.0.0.1"; 
        trace("Any of you heard of a socket with IP address " + address + " and port " + serverPort + "..." + "\n");
        socket = new Socket(address, serverPort);

        trace("Sending this line to the server...");
        socket.writeInt(502); 
        socket.flush();
      
        var data:String = "";
     
         var ch:int =      socket.bytesAvailable;

        while (ch == 0){
            ch =   socket.bytesAvailable;
            trace ('ch = '+ch);
        }
        if (ch>0){
            data += socket.readUTF();
            trace ('data = '+data);
        }
        trace("data " + data);

        if (data!=""){
        socket.close(); 
         trace ("Socket closed!");  
             }
        trace ("Socket not closed!");
    }
}
}





Автор: Simplifier 21.7.2013, 00:10
Данные из сокета надо в ас3 считывать не синхронно, а по событию ProgressEvent.SOCKET_DATA. http://help.adobe.com/ru_RU/FlashPlatform/reference/actionscript/3/flash/net/Socket.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)