자바 플래시 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파서를 추가해서 플래시에서 특정한 정보를 보낼 수 있도록 했지요
'컴퓨터 > 언어,프로그래밍' 카테고리의 다른 글
채팅프로그램 Client (0) | 2009.10.08 |
---|---|
채팅프로그램 Server (0) | 2009.10.08 |
버튼 클릭과 동시에 textarea내용이 클립보드로 저장되는 소스 + 위지윅 프로그램 소스 (0) | 2009.09.30 |
[스크랩] PHP에서 자바스크립트 변수넘기기 2가지방법 정리 (0) | 2009.09.28 |
DIV 레이어 속성 (0) | 2009.09.21 |