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();
}
}
}