JAVA

Network ( Ⅰ )

choi121xx 2014. 9. 12. 15:10

 

[ 서버프로그램 ]


1. server


 - 클라이언트의 접속을 받아들이는 프로그램


 - 서버프로그램의 작성단계

 1) ServerSocket 생성(포트번호필요)

 2) 클라이언트의 접속대기

 3) 클라이언트가 접속해오면 접속을 허용하고 클라이언트와 데이터를 주고받는 Socket생성(accept()메소드)

 4) Socket을 통해 클라이언트와 데이터 주고 받기

 5) 접속종료(소켓닫기)

 


ex> MyServer.java

package test01.net;

import java.io.IOException;

import java.io.InputStream;

import java.net.ServerSocket;

import java.net.Socket;


public class MyServer {

    public static void main(String[] args) {

        ServerSocket server=null;

        Socket sock=null;

        try{

            //1.서버소켓 생성하기

            server=new ServerSocket(3000);

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


            //2.클라이언트의 접속을 대기하고 클라이언트가 접속해오면 

            //이를 받아들이고 Socket을 생성하기

            sock=server.accept();

            System.out.println("클라이언트가 접속했어요!");


            //상대방으로부터 데이터를 받기위한 스트림객체 얻어오기

            InputStream in=sock.getInputStream();

            byte b[]=new byte[1024];


            //상대방이 보내온 데이터를 읽어와 b배열에 저장.n에는

            //읽어온바이트수크기가 저장된다.

            int n=in.read(b);


            //b배열의 0번째부터 전송한 크기만큼만 String객체로 만들기

            String ss=new String(b,0,n);


            //전송받은 문자열을 화면에 출력하기

            System.out.println("클라이언트가 보내온 메시지:"+ ss);

            

            //4. 접속종료(소켓닫기)      

            sock.close();

            server.close();

        }catch(IOException ie){

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

        }

        System.out.println("프로그램이 종료합니다.");

    }

}

 




[ 클라이언트 프로그램 ]


2. client


 - 서버에 접속하는 프로그램

 - 클라이언트 프로그램 작성단계

 1) Socket을 이용하여 서버에 접속(ip주소,포트번호 필요)

 2) Socket을 이용하여 데이터 주고받기(이때 stream을 사용한다.)

 3) 접속끊기(소켓종료)



 

ex>  MyClient.java

package test01.net;

import java.io.IOException;

import java.io.OutputStream;

import java.net.Socket;

import java.net.UnknownHostException;


public class MyClient {

    public static void main(String[] args) {

        Socket sock=null;

        try{

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

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


            String msg="반가워요 서버~";


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

            OutputStream os=sock.getOutputStream();


            //String객체를 바이트배열로 변환해서 데이터 보내기->os가 1바이트처리

            //스트림이므로

            os.write(msg.getBytes());

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

            System.out.println("메시지 보내기 성공!");

            

            //소켓닫기

            sock.close();

        }catch(UnknownHostException ue){

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

        }catch(IOException ie){

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

        }

    }

}