TCP/IP

Socket을 통해서 서버와 클라이언트가 연결하고, 통신을 합니다.


Server 순서

1. 소켓 생성

2. 연결 요청할 주소 설정

3. 소켓에 포트를 연결

4. 커널 개통에 연결

//반복

5. 클라이언트 연결 수신

6. 클라이언트 서비스 제공

7. 클라이언트 연결 종료

//반복 끝

8. 서버 종료


Client 순서

1. 클라이언트 소켓 생성

2. 연결할 서버의 주소 설정

3. 소켓을 서버와 연결

4. 서비스 요청 & 처리

5. 클라이언트 종료




1. Server Source

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.InetAddress;

import java.net.ServerSocket;

import java.net.Socket;


public class Server {

public static void main(String[] args) {

try {

// 서버 소켓을 열고, 포트 9000번

ServerSocket s_socket = new ServerSocket(9000);

System.out.println("Client accept!!");

// 클라이언트 대기한다.

Socket c_socket = s_socket.accept();


// 클라이언트 주소 가져온다.

InetAddress addr = c_socket.getInetAddress();

System.out.println(addr.getHostAddress() + 

"로 부터 접속했습니다.");

/*

* Stream* 문자를 보내고 받는 것을 Stream에 

넣어서 Stream데이터를 Byte배열 같은 데이터 구조로

* 전송한다.

*/

InputStream in = c_socket.getInputStream();

OutputStream out = c_socket.getOutputStream();

BufferedReader br = new BufferedReader(

new InputStreamReader(in));

PrintWriter pw = new PrintWriter(

new OutputStreamWriter(out));

// String 형식을 담아서 출력시킨다.

String message = null;

while ((message = br.readLine()) != null) {

System.out.println("client : " + message);

// OutputStream에 담아서 메세지를 보낸다.

pw.println(message);

//Stream에 대한 모든 버퍼를 지운다.

pw.flush();

}

//다 닫아준다.

br.close();

pw.close();

c_socket.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}




2. Client Source

import java.io.BufferedReader;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.Socket;


public class Client {

public static void main(String arg[]){

try{

//자신의 소켓을 연다.

Socket socket=new Socket("210.118.69.56",9000);

//입력을 버퍼에 넣는다.

BufferedReader kb=new BufferedReader(

new InputStreamReader(System.in));

/*

* Stream* 문자를 보내고 받는 것을 Stream에 넣어서

 Stream데이터를 Byte배열 같은 데이터 구조로

* 전송한다.

*/

InputStream in=socket.getInputStream();

OutputStream out= socket.getOutputStream();

BufferedReader br=new BufferedReader(

new InputStreamReader(in));

PrintWriter pw=new PrintWriter(

new OutputStreamWriter(out));

String message=null;

//입력받은 것이 null이 아니면!

while((message=kb.readLine())!=null){

if(message.equals("exit"))

break;

//메세지를 보낸다.

pw.println(message);

//Stream에 대한 모든 버퍼를 지운다.

pw.flush();

String echoMessage=br.readLine();

System.out.println("Server : "+echoMessage);

}

br.close();

pw.close();

socket.close();

}catch(Exception e){

e.printStackTrace();

}

}

}




+ Recent posts