- TCP는 Socket 과 ServerSocket를 사용하여 데이터를 주고 받습니다.
- Socket 은 목적지 정보를 전송 수신하는 역할을 합니다.
- ServerSocket 은 포트 번호와 Client와 연결되는 서버의 최대 연결 수를 지정 할 수 있습니다.
- 신뢰성(데이타 손실이 없습니다.)
- 양뱡향 통신 가능
- 바이트 스트림 지원
- UDP에 비해 다소 느릴 수 있음.
Client 예제
/* * 클라이언트에서 작업할 내용
* 1)소켓 객체 생성(ip, port지정) ==> 해당 ip에 접속하여 정상적인 접속이 완료되면 객체가 생성
* 2)I.O 스트림 열기
* 3)자료 송/수신
* 4)소켓 닫기
* */
public class TestClient {
static Socket s;
public TestClient() throws IOException {
s = new Socket("127.0.0.1", 9999); // 서버주소
BufferedReader reader = new BufferedReader(new InputStreamReader(
s.getInputStream()));
PrintWriter writer = new PrintWriter(s.getOutputStream());
String msg = "Strat!!";
String rMsg = null;
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
while (!msg.equals("bye")) {
System.out.print("전송입력 : ");
msg = in.readLine();
writer.print(msg);
writer.flush();
System.out.println("가는 중...");
rMsg = reader.readLine();
System.out.print("받은 메세지:" + rMsg);
}
}
public static void main(String[] args) throws IOException {
try {
new TestClient();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
- 주소와 포트번호와 함께 Socket을 생성 합니다.
- 바이트 스트림을 지원 하므로 바이트 형태로 데이타를 주고 받습니다.
- in.readLine()으로 입력 받은 문자를 writer.print(msg)을 사용하여 Server에 보내고 writer.flush() 시켜줍니다.
- rMsg = reader.readLine()은 Server에서 받은 메세지를 한줄씩 읽습니다.
- BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream())) 와 PrintWriter writer = new PrintWriter(s.getOutputStream())에서 전송한 데이타와 수신한 데이터를 알 수 있습니다.
Server 예제
/* * 서버에서 수행하는 일
* 1)서버소켓 객체 생성
* 2)클라이언트 접속 대기
* 3)자료 송/수신
* 4)소켓 닫기 */
public class TestServer {
static ServerSocket ss = null;
static Socket s = null;
public TestServer() throws IOException {
ss = new ServerSocket();
s = new Socket();
ss = new ServerSocket(9999);
System.out.println("클라이언트 접속 대기 중...");
s = ss.accept();
System.out.println("클라이언트 접속!!");
BufferedReader reader = new BufferedReader(new InputStreamReader(
s.getInputStream()));
PrintWriter write = new PrintWriter(s.getOutputStream());
String msg = "Start!";
while (!msg.equals("bye")) {
System.out.println("받는 중...");
msg = reader.readLine();
System.out.println("수신데이타 : " + msg);
write.println(msg);
write.flush();
}
}
public static void main(String[] args) {
try {
new TestServer();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
ss.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
- ServerSocket으로 포트 번호를 맞춰 줍니다.
- s = ss.accept() 부분이 Client가 접속하기를 기다리는 부분입니다. 서버는 클라이언트가 접속하기 전까지 대기하고있는 상태입니다.
- msg = reader.readLine() 위에 스트림으로 받은 데이터를 다시 Client로 전송하는 부분입니다.
TCP를 설명하기 위해 간단히 작성된 소스입니다. 요약하자면 Client에서 Socket 를 사용하여 목적지(서버)의 주소와 포트번호를 설정하여 보내면 서버에서는 ServerSocket 에서 포트를 맞추고 accept()에서 접속하기를 기달리고 있다가 스트림을 이용하여 다시 전송하는 코드입니다.
관련글
관련글
댓글 없음:
댓글 쓰기