Server&Client
 

v      Socket 프로그래밍

n       Socket 클래스

n       TCP/IP 네트워크에서 프로그래밍을 할 때 Socket API를 이용한다.

n       Socket  BSD UNIX에서 처음 사용된 개념으로 하위의 복잡한 프로토콜에 상관없이 마치 파일과 같은 I/O장치를 사용하는 것과 같이 프로그래밍 할 수 있다.

n       java.net 패키지에 정의되어 있다.

n       ServerSocket 클래스

n       서버 프로그램에서만 사용되는 소켓.

n       포트를 열어 놓고 연결요청이 오기를 기다림.

n       연결요청이 들어오면 그 요청을 연결하는 클라이언트 소켓을 생성하여 반환함.

 

TCP 서버 절차 정리

  1. ServerSocket 객체를 만든다.
    ServerSocket servSocket = new ServerSocket(serverPort);
  2. 연결을 기다린다.
    Socket clntSocket = servSocket.accept();
  3. 입력스트림 clntSock.getInputStream() 과 출력스트림 clntSock.getOutputStream() 을 구한다.
  4. 데이터를 주고 받는다.
    out.println(출력할 데이터);
    String input = in.readLine();
  5. 연결을 닫는다.
    clntSocket.close()

 

TCP 클라이언트 절차 정리

  1. 서버로의 연결을 만든다.
    Socket cSocket =
    new Socket(serverIP,serverPort);
  2. 입력스트림 cSock.getInputStream() 과 출력스트림 cSock.getOutputStream() 을 구한다.
  3. 데이터를 주고 받는다.
    out.println(출력할 데이터);
    String input = in.readLine();
  4. 연결을 닫는다.
    cSocket.close()

 

import java.net.*;

import java.io.*;

 

public class JavaServer {

             private int port=8088;

             private ServerSocket servSocket;

             private Socket clntSocket;

             public void listen(){

                           try {

                                        servSocket=new ServerSocket(port);

                                        clntSocket=servSocket.accept();

                           } catch (IOException e) {

                                        System.out.println("IOException :"+e.getMessage());

                           }           

             }

             public void handleConnection(){

                           try {

                                        BufferedReader br=new BufferedReader(new InputStreamReader(

clntSocket.getInputStream()));

                                        PrintWriter pw=new PrintWriter(clntSocket.getOutputStream(), true);

                                        System.out.println("Java서버가 "

+clntSocket.getInetAddress().getHostName()

                                                                      +"와 잘 연결되었습니다");

                                        System.out.println("첫 번째 입력 라인은 "+br.readLine()+"입니다. ");

                                        pw.println("Java서버에 잘 연결 되었습니다.");

                                        clntSocket.close();

                           } catch (IOException e) {

                                        e.printStackTrace();

                           }                        

             }

             public static void main(String[] args){

                           JavaServer jServer=new JavaServer();

                           jServer.listen();

                           jServer.handleConnection();

             }

}

 

 

import java.net.*;

import java.io.*;

 

public class JavaClient {

             private Socket cSocket;

             public JavaClient(String addr, int port){

                           try {

                                        cSocket=new Socket(addr, port);

                           } catch (IOException e) {

                                        e.printStackTrace();

                           }

             }

             public void handleConnection(){

                           try {

                                        BufferedReader br=new BufferedReader(new InputStreamReader

(cSocket.getInputStream()));

                                        PrintWriter pw=new PrintWriter(cSocket.getOutputStream(), true);

                                        System.out.println("Java 클라이언트가"+

                                                     cSocket.getInetAddress().getHostName()+"에 연결되었습니다");                                                                                                                           

                                        pw.println("여기는 Java 클라이언트입니다.");

System.out.println("서버로부터의 첫 입력라인은 "+br.readLine()+"입니다");                                                                    

                                        cSocket.close();

                           } catch (IOException e) {

                                        e.printStackTrace();

                           }

             }

             public static void main(String[] args){

                           String addr="127.0.0.1";

                           int port=8088;

                           JavaClient jClient=new JavaClient(addr, port);

                           jClient.handleConnection();

             }

}

 


 































ServerSocket 을 만들어 대기하고 Client로 부터 요청이 있으면 인스턴스(소켓)를 만들어
응답한다. 인스턴스 갯수를 제한 할 수도 있다. Server와 Client 사이에 통신이 끝나면
세션을 close()로 닫아준다. Stream의 교환 받는거는 getInputStream(), 보내는거는
getOutputStream() 을 handleConnection메소드 맨 처음 실행해주었습니다.

by LetsJava | 2008/11/18 23:32 | 시스템프로젝트 | 트랙백 | 덧글(1)
트랙백 주소 : http://LetsJava.egloos.com/tb/1124858
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by 김교수 at 2008/11/22 10:07
프로젝트는 어떻게 되어가고 있나요?

:         :

:

비공개 덧글