서버는 java.net.ServerSoket 을 이용해 소켓을 생성한다.
java.net.Socket 을 이용해 클라이언트의 접속을 대기(accept())한다.
접속한 클라이언트의 정보는 java.net.InetAddress 을 반환하는 getInetAddress() 메소드를 사용한다.
Socket 의 getInputStream(), getOutputStream() 메소드를 이용해 접속한 클라이언트와 통신하게 된다.
클라이언트는 Socket 을 통해 서버에 접속하고 서버와 같이 Stream 을 통해 통신한다.
socket 을 닫기(close()) 전에 반드시 Stream 들을 close() 하도록 한다.
package com.cs.baeksupervisor;
import java.io.BufferedReader;
import java.io.IOException;
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 EchoServer {
public static void main(String[] args) {
ServerSocket server = null;
Socket socket = null;
InetAddress inetAddr = null;
InputStream in = null;
OutputStream out = null;
BufferedReader reader = null;
PrintWriter writer = null;
try {
// 서버 소켓 생성
server = new ServerSocket(1590);
// 클라이언트의 접속 대기
System.out.println("====== 클라이언트의 접속 대기 중 (port:"+server.getLocalPort()+")=====");
socket = server.accept();
// 클라이언트의 접속 요청
inetAddr = server.getInetAddress();
System.out.println("클라이언트("+inetAddr.getHostAddress()+") 접속");
// 클라이언트와 통신을 위한 stream 생성
in = socket.getInputStream();
out = socket.getOutputStream();
reader = new BufferedReader(new InputStreamReader(in));
writer = new PrintWriter(new OutputStreamWriter(out));
String msg = null;
// 클라이언트와 통신
while((msg = reader.readLine()) != null) {
System.out.println("\tCLIENT>"+msg);
writer.println(msg);
writer.flush();
}
} catch(IOException ie) {
System.out.println(ie);
} finally {
try {
reader.close();
writer.close();
in.close();
out.close();
socket.close();
server.close();
System.out.println("종료.");
} catch(IOException ie) {
System.out.println(ie);
}
}
}
}
package com.cs.baeksupervisor;
import java.io.BufferedReader;
import java.io.IOException;
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 EchoClient {
public static void main(String[] args) {
Socket socket = null;
InputStream in = null;
OutputStream out = null;
BufferedReader reader = null;
PrintWriter writer = null;
BufferedReader stdin = null;
try {
// 서버로 접속
socket = new Socket("127.0.0.1", 1590);
System.out.println("접속성공 !!");
// 서버와 통신을 위한 stream, 표준입력 변수
in = socket.getInputStream();
out = socket.getOutputStream();
reader = new BufferedReader(new InputStreamReader(in));
writer = new PrintWriter(new OutputStreamWriter(out));
stdin = new BufferedReader(new InputStreamReader(System.in));
String msg = null;
String echo = null;
// 서버와 통신
while((msg = stdin.readLine()) != null) {
writer.println(msg);
writer.flush();
echo = reader.readLine();
System.out.println("\tSERVER>"+echo);
}
} catch(IOException ie) {
System.out.println(ie);
} finally {
try {
stdin.close();
reader.close();
writer.close();
in.close();
out.close();
socket.close();
System.out.println("종료.");
} catch(IOException ie) {
System.out.println(ie);
}
}
}
}
'Java' 카테고리의 다른 글
| [Java] 한글 처리 (0) | 2014.11.18 |
|---|---|
| [linux] 오라클 에러 정보 확인 (0) | 2014.08.29 |
| [Java] 정규식 패턴 (0) | 2014.07.17 |
| [Java] Java Doc 사용법 (0) | 2014.07.14 |
| [Java] Java와 스크립트 통신 (0) | 2014.06.12 |