선릉역 1번 출구
TCP 네트워킹 - 1 본문
TCP = 연결 지향적 프로토콜(Server - Client가 연결된 상태에서 데이터를 주고 받음)
*연결: 3 way hand shake
SYN(a) - SYN(b)/ACK(a+1) - ACK(b+1)
TCP Server의 역할
- 클라이언트가 연결 요청을 해오면 연결을 수락하는 것
- Java의 java.net.ServerSocket
- 연결된 클라이언트와 통신하는 것
- Java의 java.net.Socket
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
public class ServerExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
ServerSocket serverSocket = null;
try {
serverSocket = new ServerSocket();
serverSocket.bind(new InetSocketAddress("localhost", 5001));
while(true) {
System.out.println("[연결 기다림]");
Socket socket = serverSocket.accept();
InetSocketAddress isa = (InetSocketAddress) socket.getRemoteSocketAddress();
System.out.println("[연결 수락함]" + isa.getHostName());
}
} catch(Exception e) {}
if(!serverSocket.isClosed()) {
try {
serverSocket.close();
} catch(IOException e1) {}
}
}
}
binding port: 클라이언트가 접속할 포트를 의미함
Accept() -> 클라이언트가 연결 요청을 해오면 해당 메소드로 연결 수락을 하고, 클라이언트와 통신할 Socket을 만들고 리턴함
해당 메소드는 클라이언트가 연결 요청하기 전까지 블로킹됨 -> 블로킹(스레드가 대기 상태가 된다는 것)
exception) accept()가 블로킹되어 있을 때 ServerSocket을 닫기위해 close()를 호출하면 SocketException이 발생함
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
public class ClientExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
Socket socket = null;
try {
socket = new Socket();
System.out.println("[연결 요청]");
socket.connect(new InetSocketAddress("localhost", 5001));
System.out.println("[연결 성공]");
} catch(Exception e) {}
if(!socket.isClosed()) {
try {
socket.close();
} catch(IOException e1) {
}
}
}
}
'Computer > Network' 카테고리의 다른 글
chatgpt를 활용한 tcp의 3way handshake 질의 응답(1) (0) | 2023.01.29 |
---|---|
TCP 네트워킹 - 2 (0) | 2023.01.03 |
[Packet Tracer] 무선랜 암호(WPA2-PSK, WPA2-Enterprise) (2) | 2022.12.22 |
[Packet Tracer] 무선랜 (0) | 2022.12.21 |
[Packet Tracer] inter-VLAN (0) | 2022.12.20 |
Comments