본문 바로가기

JAVA/기본다지기

JAVA 23일차 필기

모의 서버


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