ex> 서버와 클라이언트 구성 (채팅 참고)

1) 서버를 먼저 실행하고 

2) 클라이언트를 실행한다. 클라이언트에서 입력하면 서버에서 받아 화면에 뿌려준다. 


1. server

MyServer01.java

package test02.net;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;

class ReceiveServer extends Thread{  //데이터를 수신하는 스레드

    private Socket sock;

    public ReceiveServer(Socket sock){

        this.sock=sock;

    }

    public void run(){

        try{

            //상대방(클라이언트)가 보내온 문자열을 읽어오기위한 스트림생성

            BufferedReader br=

                new BufferedReader(new InputStreamReader(sock.getInputStream()));

            while(true){        

                //상대방(클라이언트)가 보내온 문자열 읽어오기

                String msg=br.readLine();

                if(msg==null){

                    System.out.println("상대방이 접속을 해제했어요!");

                    break;

                }

                System.out.println("상대방>>" + msg);

            }

            br.close();

            sock.close();

        }catch(IOException ie){

            System.out.println(ie.getMessage());

        }

    }

}

class SendServer extends Thread{//데이터를 보내는 스레드

    private Socket sock;

    public SendServer(Socket sock){

        this.sock=sock;

    }

    public void run(){

        //키보드로 문자열 입력받기위한 스트림객체 생성

        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        try{

            //문자열을 상대방에 보내기위한 스트림객체 생성

            PrintWriter pw=new PrintWriter(sock.getOutputStream());

            while(true){

                //키보드로 문자열 입력받기

                String msg=br.readLine();

                if(msg.equals("exit")) break;

                //문자열을 클라이언트에 보내기

                pw.println(msg);

                pw.flush();

            }

            pw.close();

            sock.close();

        }catch(IOException ie){

            System.out.println(ie.getMessage());

        }

    }

}

public class MyServer01 {

    public static void main(String[] args) {

        ServerSocket server=null;

        try{

            server=new ServerSocket(3000);

            System.out.println("클라이언트접속대기중..");

            Socket sock=server.accept();

            System.out.println("클라이언트가 접속했습니다.");

            //데이터(문자열)를 전송받는 스레드 실행

            new ReceiveServer(sock).start();

            //데이터(문자열)를 보내는 스레드 실행

            new SendServer(sock).start();

            server.close();

        }catch(IOException ie){

            System.out.println(ie.getMessage());

        }

    }

}


 

 





2. client

MyClient01.java

package test02.net;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

class ReceiveClient extends Thread{//서버에서 보내온 데이터를 수신하는 스레드

    private Socket sock;

    public ReceiveClient(Socket sock){

        this.sock=sock;

    }

    public void run(){

        try{

            //서버가 보내온 데이터를 읽어오기 위한 스트림객체 생성

            BufferedReader br=

             new BufferedReader(new InputStreamReader(sock.getInputStream()));

            while(true){

                //서버가 보낸 문자열 읽어오기

                String msg=br.readLine();

                if(msg==null) {

                    System.out.println("상대방이 접속을 해제했어요!");

                    break;

                }

                System.out.println("상대방>>" + msg);//받은문자열화면에출력

            }

            br.close();

            sock.close();

        }catch(IOException ie){

            System.out.println(ie.getMessage());

        }

    }

}

class SendClient extends Thread{

    private Socket sock;

    public SendClient(Socket sock){

        this.sock=sock;

    }

    public void run(){

        //키보드로부터 입력받기 위한 스트림객체

        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

        try{

            //상대방에 데이터를 보내기위한 스트림객체생성

            PrintWriter pw=new PrintWriter(sock.getOutputStream());

            while(true){

                String msg=br.readLine();//키보드로 문자열 입력받기

                if(msg.equals("exit")) break;//while끝내기

                pw.println(msg);//상대방에 문자열 보내기

                pw.flush();

            }

            pw.close();

            sock.close();

        }catch(IOException ie){

            System.out.println(ie.getMessage());

        }

    }

}

public class MyClient01 {

    public static void main(String[] args) {

        Socket sock=null;

        try{

            sock=new Socket("127.0.0.1",3000);

            System.out.println("서버접속성공!");

            //데이터를 읽어오는 스레드 실행하기

            new ReceiveClient(sock).start();

            //데이터를 보내는 스레드 실행하기

            new SendClient(sock).start();

        }catch(UnknownHostException ue){

            System.out.println(ue.getMessage());

        }catch(IOException ie){

            System.out.println(ie.getMessage());

        }

    }

}


클라이언트에서 입력 

 


서버쪽에 화면에 넘어온 값을 출력한다. 

 

'JAVA' 카테고리의 다른 글

AWT ( Frame / Button / Layout / JPanel ) - 간단한 예제  (0) 2014.09.13
Network - 파일전송 ( Ⅳ )  (0) 2014.09.12
Network ( Ⅱ )  (0) 2014.09.12
Network ( Ⅰ )  (0) 2014.09.12
스레드(Thread)  (0) 2014.09.12

+ Recent posts