IT story/Java

D+23 네트워크통신(Tcp/Ip Server)

jason719 2016. 9. 8. 13:52

2016. 09. 08. Thu. 스물세 번째 수업


오늘의 수업내용


네트워크통신(Tcp/Ip Server) 구현하기

  • 데이터 구조 hash -> key 입력하면 value가 나오는 구조
  • get이 엄청 빠르다. -> MultiThread 구조에서 무결성에 취약함
  • 무결성 -> key -> 현실세계의 주민번호와 같은 역할
  • TreeMap(stack queue List Tree Set Map Hash)
  • synchronizedMap() -> MultiThread 구조에서 무결성을 지켜준다.

예제

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<String,DataOutputStream> clients;

public L02TcpIpServer() {

clients = new HashMap<String,DataOutputStream>();

Collections.synchronizedMap(clients);

}//생성

public void serverStart() {

ServerSocket server = null;

Socket socket = null;

try {

server = new ServerSocket(5000);

System.out.println("서버가 준비되었습니다.");

while(true){//서버가 종료되지 않게 하기위해 thread 하나를 구현

socket = server.accept(); //접속자가 있을 때 Socket을 반환한다.

new ServerReceiver(socket).start();

}

} catch (IOException e){e.printStackTrace();

}

}//serverStart

class ServerReceiver extends Thread {

        //client가 보낸 메시지를 받아서 모든 clients에게 다시 메시지를 보낸다.

DataInputStream in;

DataOutputStream out;

public ServerReceiver(Socket socket) {

try {

in = new DataInputStream(socket.getInputStream()); 

//in을 쓰면 받을 수 있다.

out = new DataOutputStream(socket.getOutputStream());

   //out을 쓰면 보낼 수 있다.

} catch(IOException e){e.printStackTrace();

}

}

private void sendAll(String msg) {

Iterator it = clients.keySet().iterator();

while(it.hasNext()) {

try{

DataOutputStream out = clients.get(it.next());

out.writeUTF(msg); //접속시 발생되는 메시지

} catch (IOException e){e.printStackTrace();

}

}

}//sendAll

@Override

public void run() {

String name;

try {

name = in.readUTF();

clients.put(name, out);

out.writeUTF("접속자수: "+clients.size());

sendAll(name+"님 접속 (접속자수: "+clients.size()+")");

while(in!=null){//메시지를 보내는 thread

sendAll(in.readUTF());

}

} catch (IOException e){e.printStackTrace();

}

}//run

}//ServerReceiver

public static void main(String[] args) {

        new L02TcpIpServer().serverStart();

}//main

}//class


위의 예제처럼 서버를 구축하고 앞의 포스트 내용의 Tcp/Ip Cilent를 구현해서 IP주소와 포트를 입력하면 

접속할 수 있다. 

'IT story > Java' 카테고리의 다른 글

ex) 네트워크통신(채팅창 생성)  (0) 2016.09.14
D+22 네트워크통신 (Tcp/Ip Client)  (0) 2016.09.08
D+21 Text Editor(메모장 만들기)  (0) 2016.09.06
D+20 awt(text & text editor)  (0) 2016.09.06
D+19 Thread(쓰레드)  (0) 2016.09.01