본문 바로가기

컴퓨터/언어,프로그래밍

자바 플래시 XML 채팅 서버

자바 플래시 XML 채팅 서버

 

import java.awt.event.*;
import java.util.*;
import java.awt.*;
import java.io.*;
import java.net.*;


public class CommServer {
        private Vector clients = new Vector();  // 접속자 이스트
        ServerSocket server;                    // 서버

        /*
        서버 생성자
        서버를 시작!
        */

        public CommServer(int port) { //생성자
                startServer(port); //서버를 시작한다. 포트번호는 첫번째 파라매터
        }

        /*
        서버스를 시작하고 접속자를 기다린닷
        */

        private void startServer(int port) { //서버시작 메소드
                writeActivity("Attempting to Start Server");

                try {
                        //서버 생성
                        server = new ServerSocket(port); //소켓 생성
                        writeActivity("Server Started on Port: " + port);
                        //서버가 돌아가는 동안
                        while(true) {
                                //클라이언트를 기다린다.
                                Socket socket = server.accept();
                                CSClient client = new CSClient(this, socket); //유저가 접속하면 쓰레드 생성(클라이언트)
                                writeActivity(client.getIP() + " connected to the server.");

                                //다른 놈들의 유저수를 알아온다.
                                Enumeration enum = clients.elements();
                                while (enum.hasMoreElements()) { //모든 클라이언트의 캐릭터,위치,종류를 받아온닷

                                        CSClient tclient = (CSClient)enum.nextElement();
                                        String msg = "<ADD><USER>"+tclient.getUname()+
                                        "</USER><TYPE>"+tclient.getUtype()+
                                        "</TYPE><POS_X>"+tclient.getUx()+
                                        "</POS_X><POS_Y>"+tclient.getUy()+
                                        "</POS_Y><NIC>"+tclient.getUnic()+
                                        "</NIC></ADD>"; // XML문서 생성
                                        msg += '\0';//XML의 끝을 알린다.
                                        //System.out.println(msg);
                                        client.send(msg); //현재 접속한 놈한테 메세지를 보낸다.
                                }

                                //방금 접속한놈에게
                                clients.addElement(client); //유저리스트에 추가
                                //쓰레드
                                client.start(); //쓰레드 시작
                                //다른 녀석들에게 유저수를 알려준다(몇명 접속중인지)
                                broadcastMessage("<NUMCLIENTS>" + clients.size()
                                + "</NUMCLIENTS>");

                        }
                } catch(IOException ioe) {
                        writeActivity("Server Error...Stopping Server");
                        // kill this server
                        System.out.println("err"+ioe);
                        killServer();
                }
        }

        /*
        모두에게 메세지 보내는 부분.
        */

        public synchronized void broadcastMessage(String message) { //접속된 녀석들에게 메세지를 보낸다.

                message += '\0'; //메세지의 끝을 알린다

                Enumeration enum = clients.elements();
                while (enum.hasMoreElements()) { //모든 클라이언트에게..
                        CSClient client = (CSClient)enum.nextElement();
                        client.send(message); //메세지를 보낸다.
                }

        }

        /*
        클라이언트 리스트에서 클라이 언트를 제거
        */

        public void removeClient(CSClient client) {
                writeActivity(client.getIP() + " has left the server.");

                String msg = "<REMOVE><USER>"+client.getUname()+"</USER></REMOVE>"; // XML문서 생성
                msg += '\0';//XML의 끝을 알린다.
                //클라이언트 리스트에서 제거
                clients.removeElement(client);

                //클라이언트 모듈에서 케릭터 제거
                broadcastMessage(msg);

                //클라이언트 숫자를 다시 알려준다.
                broadcastMessage("<NUMCLIENTS>" + clients.size() + "</NUMCLIENTS>");
        }
        /*
        메세지 출력 폼
        */

        public void writeActivity(String activity) {
                // --- get the current date and time
                Calendar cal = Calendar.getInstance();
                activity = "[" + cal.get(Calendar.MONTH)
                + "/" + cal.get(Calendar.DAY_OF_MONTH)
                + "/" + cal.get(Calendar.YEAR)
                + " "
                + cal.get(Calendar.HOUR_OF_DAY)
                + ":" + cal.get(Calendar.MINUTE)
                + ":" + cal.get(Calendar.SECOND)
                + "] " + activity + "\n";

                // --- display the activity
                System.out.print(activity);
        }

        /*
        서버를 멈춰
        */

        private void killServer() {
                try {
                        //멈춘다
                        server.close();
                        writeActivity("Server Stopped");
                } catch (IOException ioe) {
                        writeActivity("Error while stopping Server");
                }
        }

        public static void main(String args[]) {
                //포트 아규먼트 첵
                if(args.length == 1) {
                        CommServer myCS = new CommServer(Integer.parseInt(args[0]));
                } else {
                        //틀리면 방법을 갈쳐준다
                        System.out.println("Usage: java CommServer [port]");
                }
        }
}

 

 

원소스는 무크꺼입니다.

거기 소스는 단순히 플래시에서 오는 문자열을 브로드 캐스트만 해줍니다.

 

여기에 XML파서를 추가해서 플래시에서 특정한 정보를 보낼 수 있도록 했지요

제주삼다수, 2L,... 오뚜기 진라면 매운... 상하목장 유기농 흰... 남양 프렌치카페 카... 고려인삼유통 홍삼 ... 종근당건강 오메가3... 요이치 카링 유무선...