JAVA

Network ( Ⅱ )

choi121xx 2014. 9. 12. 15:11

 

1. server


ex> MyServer01.java

package test01.net;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;

public class MyServer01 {

    public static void main(String[] args) {

        ServerSocket server=null;

        //키보드로부터 문자열을 입력받기 위한 스트림객체 얻어오기

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

        try{

            server=new ServerSocket(3000);

            System.out.println("서버가 실행됨");

            Socket sock=server.accept();

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

            

            //접속한 클라이언트의 ip주소에 대한 정보를 갖는 객체 얻어오기

            InetAddress ia=sock.getInetAddress();

            //클라이언트의 아이피주소 출력하기

            System.out.println("접속자 ip:" + ia.getHostAddress());

            

            //상대방에 데이터를 보내기위한 스트림객체 얻어오기

            OutputStream os=sock.getOutputStream();

            //1바이트처리스트림객체를 2바이트 처리스트림으로 변환하기

            PrintWriter pw=new PrintWriter(os);

            

            //상대방(클라이언트)가 보낸 데이터를 읽어오기 위한 스트림 얻어오기

            InputStream in=sock.getInputStream();

            //1바이트처리스트림을 2바이트 처리스트림으로 변환하기

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

            

            while(true){

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

                String msg=br.readLine();

                if(msg==null){

                    System.out.println("상대방이 접속을 해제했습니다.");

                    break;

                }

                System.out.println("상대방이보낸문자열>>" + msg);

                System.out.println("클라이언트에 보낼 메시지입력");

                String str=br1.readLine();//키보드로부터 문자열 입력받기

                if(str.equals("exit")){

                    System.out.println("접속을 종료합니다.");

                    break;

                }

                pw.println(str);//상대방(클라이언트)에 문자열 보내기

                pw.flush();//버퍼가 다 차지않아도 데이터 보내기

            }

            br.close();//스트림닫기

            pw.close();//스트림닫기

            sock.close();//소켓종료

            server.close();//서버소켓종료

        }catch(IOException ie){

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

        }

    }

}

 


2. client


ex> MyClient01.java

package test01.net;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.PrintWriter;

import java.net.Socket;

import java.net.UnknownHostException;

import java.io.OutputStream;

public class MyClient01 {

    public static void main(String[] args) {

        Socket sock=null;

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

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

        try{

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

            //상대방에 데이터를 보내기위한 출력스트림 얻어오기

            OutputStream out=sock.getOutputStream();

            //1바이트처리스트림을 2바이트처리스트림으로 포장하기

            PrintWriter pw=new PrintWriter(out);

            //상대방이 보낸 데이터를 읽어오기위한 스트림 얻어오기

            InputStream in=sock.getInputStream();

            //1바이트처리스트림을 2바이트 처리스트림으로 포장하기

            BufferedReader sbr=new BufferedReader(new InputStreamReader(in));

            

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

            

            while(true){

                System.out.println("서버로 보낼문자열 입력");

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

                if(msg.equals("exit")){

                    System.out.println("서버와 접속을 종료합니다.");

                    break;

                }

                pw.println(msg);//상대방(서버)에 msg보내기

                pw.flush();//버퍼가 차지 않아도 데이터 내보내기

                String str=sbr.readLine();//상대방이 보낸 문자열 읽어오기

                if(str==null){//상대방이 접속을 종료한경우

                    System.out.println("상대방이 접속을 끊었습니다.");

                    break;

                }

                System.out.println("상대방이 보낸 문자열>>"+str);

            }

            sbr.close();//스트림닫기

            pw.close();//스트림닫기

            sock.close();//소켓닫기

        }catch(UnknownHostException ue){

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

        }catch(IOException ie){

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

        }

    }

}





[ 서버프로그램 ]

 - 클라이언트가 접속해오면 클라이언트의 아이피주소를 출력하고 클라이언트의 아이피주소를 클라이언트에 보내기

[ 클라이언트프로그램 ]

 - 서버에 접속하고 서버가 보내온 아이피주소(클라이언트의 아이피주소)를 읽어와 화면에 출력하기


ex> Quiz01 

server >>

package test01.net;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;


public class Quiz01 {

    public static void main(String[] args) {

        ServerSocket server=null;

        try{

            server=new ServerSocket(3001);

            System.out.println("서버실행");

            Socket sock=server.accept();

            System.out.println("클라이언트가 접속함");

            InetAddress ia=sock.getInetAddress();

            //클라이언트의 아이피주소 얻어오기

            String ip=ia.getHostAddress();

            System.out.println("접속한 클라이언트 ip주소:" + ip);

            //상대방에 데이터를 보내기(출력)하기위한 스트림 생성하기

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

            //상대방에 ip주소 보내기

            pw.println(ip);

            pw.flush();

            //스트림닫기

            pw.close();

            //소켓닫기

            sock.close();

            server.close();

            System.out.println("서버가 종료되었어요~~~");

        }catch(IOException ie){

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

        }

    }

}

 

 

client>>

package test01.net;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.Socket;

import java.net.UnknownHostException;

public class Quiz01_client {

    public static void main(String[] args) {

        Socket sock=null;

        try{

            sock=new Socket("localhost",3001);

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

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

            BufferedReader br=

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

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

            String ip=br.readLine();

            System.out.println("서버가 보내준 내 ip주소:" + ip);

            br.close();//스트림닫기

            sock.close();//소켓닫기

        }catch(UnknownHostException ue){

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

        }catch(IOException ie){

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

        }

    }

}

 

 

 

 

3. 아이피 주소 얻어오기


ex> Test01_InetAddress.java

package test01.net;

import java.net.InetAddress;

import java.net.UnknownHostException;

public class Test01_InetAddress {

    public static void main(String[] args) {

        //public static InetAddress getByName(String host)

        //throws UnknownHostException

        try{

            InetAddress ia=InetAddress.getByName("www.naver.com");

            //호스트명에 해당하는 아이피주소 얻어오기

            String ip=ia.getHostAddress();

            System.out.println("naver ip주소:" + ip);

            InetAddress local=InetAddress.getLocalHost();

            System.out.println("local ip주소:" +local.getHostAddress());

        }catch(UnknownHostException ue){

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

        }

    }

}