모의 서버
package com.javalesson.ch21network;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
public class L02TcpIpServer {
HashMap clients; //데이터 구조 hash -> key 입력하면 value가 나오는 구조
//get이 엄청 빠르다 -> 멀티쓰레드 구조에서 무결성에 취약함
//무결성 ->key -> 주민번호 역할
//key가 같은 것이 2개 있으면 무결성이 깨진다
//TreeMap(stack queue List Tree Set Map Hash)
//synchronizedMap()-> 멀티쓰레드 구조에서 무결성을 지켜준다.
public L02TcpIpServer(){
clients = new HashMap();
Collections.synchronizedMap(clients);
}
public void serverStart(){
ServerSocket server = null;
Socket socket = null;
try{
server = new ServerSocket(5000);
System.out.print("서버가 준비되었습니다.");
while(true){
socket = server.accept();
System.out.println("["+socket.getInetAddress()+":"+socket.getPort()+"] 에서 접속");
new ServerReceiver(socket).start();
}
}catch(IOException e){e.printStackTrace();}
}
class ServerReceiver extends Thread{
//clients가 보낸 메세지를 받아서 모든 client에게 다시 메세지를 보낸다.
DataInputStream in;
DataOutputStream out;
//생성자에서 client가 보낸 정보를 받고 보낼 준비를 하자
public ServerReceiver(Socket socket){
try {
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
}
private void sendAll(String msg){
Iterator it = clients.keySet().iterator();
while(it.hasNext()){
try {
DataOutputStream out = (DataOutputStream)clients.get(it.next());
out.writeUTF(msg);
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void run(){
String name;
try{
name = in.readUTF();
clients.put(name, out);
System.out.println(name+"님 접속(접속자 수 : "+clients.size()+")");
sendAll(name+"님 접속(접속자 수 : "+clients.size()+")");
while(in != null){//메세지를 보내는 thread
sendAll(in.readUTF());
}
}catch(IOException e){}
}
}
public static void main(String[] args){
new L02TcpIpServer().serverStart();;
}
}
'JAVA > 기본다지기' 카테고리의 다른 글
JAVA 22일차 필기 (1) | 2016.09.07 |
---|---|
JAVA 21일차 필기 (1) | 2016.09.06 |
JAVA 20일차 필기 (1) | 2016.09.05 |
JAVA 19일차 필기 (1) | 2016.09.01 |
JAVA 18일차 필기 (1) | 2016.08.31 |