본 코드는 Head first Java의 예제 소스이다.
import java.io.*;
import java.net.*;
import java.util.*;
public class VerySimpleChatServer {
ArrayList clientOutputStreams;
public class ClientHandler implements Runnable{
BufferedReader reader;
Socket sock;
public ClientHandler(Socket clientSocket){
try{
sock = clientSocket;
InputStreamReader isReader = new InputStreamReader(sock.getInputStream());
reader = new BufferedReader(isReader);
}catch(Exception ex){
ex.printStackTrace();
}
}
public void run(){
String message;
try{
while((message = reader.readLine()) != null){
System.out.println("read "+ message);
tellEveryone(message);
}
}catch(Exception ex){
ex.printStackTrace();
}
}
}
public static void main(String[] args){
new VerySimpleChatServer().go();
}
public void go(){
clientOutputStreams = new ArrayList();
try{
ServerSocket serverSock = new ServerSocket(5000);
while(true){
Socket clientSocket = serverSock.accept();
PrintWriter writer = new PrintWriter(clientSocket.getOutputStream());
clientOutputStreams.add(writer);
Thread t = new Thread(new ClientHandler(clientSocket));
t.start();
System.out.println("got a connection");
}
}catch(Exception ex){
ex.printStackTrace();
}
}
public void tellEveryone(String message){
Iterator it = clientOutputStreams.iterator();
while(it.hasNext()){
try{
PrintWriter writer = (PrintWriter)it.next();
writer.println(message);
writer.flush();
}catch(Exception ex){
ex.printStackTrace();
}
}
}
}
'개발 이야기 > 유용한 Coding' 카테고리의 다른 글
Velocity에서 tiles 파일 불러오는 거 안될 때 (0) | 2008.07.29 |
---|---|
ANT FTP 에러 해결하는 방법 (1) | 2008.07.28 |
간단한 ChatClient (0) | 2008.05.14 |
자바관련 잡다한 이야기 - 스레드의 동기화 문제 (1) | 2008.05.14 |
자바관련 잡다한 이야기 - 네트워크와 스레드 (0) | 2008.05.13 |