자바의 네트워킹과 소켓 통신
2024. 2. 27. 03:23ㆍJava
반응형
네트워킹과 소켓 통신은 무엇인가
- 네트워킹 (Networking) 은 복수의 컴퓨터가 연결되어 서로 리소스를 교환하는 것을 의미한다.
- 소켓 (Socket) 은 서로 다른 두 프로그램이 네트워크 상에서 상호작용할 때 통로, 즉 각 프로그램의 엔드포인트 (Endpoint) 이다.
네트워킹 프로토콜
- TCP : Transmission Control Protocol. 두 어플리케이션 간 통신을 중재한다. 주로 TCP/IP 라 불리는 인터넷 통신에 쓰인다.
- UDP : User Datagram Protocol. 두 어플리케이션 간 데이터 패킷을 중재하는 프로토콜
네트워킹 예제
- 서로 다른 두 어플리케이션을 연결하기 위해 소켓 연결을 설정한다. 소켓 연결은 IP 주소와 포트로 구성되어 있다.
- 두 어플리케이션이 연결되면, 데이터 이동을 발생시킨다.
- 필요한 통신을 마치고 나면 연결을 해제한다.
클라이언트 (Client)
- IP 127.0.0.1, 포트 3000 으로 구성된 소켓을 구성한다.
- DataInputStream, DataOutputStream 을 통해 사용자로부터 입력을 받고 서버에 전송한다.
- “End” 문자열을 입력받을 때까지 반복 후 연결을 종료한다.
public class ClientTest {
private Socket socket = null;
private DataInputStream input = null;
private DataOutputStream output = null;
public ClientTest(String address, int port) {
try {
socket = new Socket(address, port);
System.out.println("Connected");
// 입력 받기
input = new DataInputStream(System.in);
// 소켓에 출력 보내기
output = new DataOutputStream(socket.getOutputStream());
} catch (IOException e) {
System.out.println("IOException");
}
String s = "";
while (!s.equals("End")) {
try {
s = input.readLine();
output.writeUTF(s);
} catch (IOException e) {
System.out.println("IOException");
}
}
try {
input.close();
output.close();
socket.close();
} catch (IOException e) {
System.out.println("IOException");
}
}
public static void main(String[] args) {
ClientTest client = new ClientTest("127.0.0.1", 3000);
}
}
서버 (Server)
- 3000번 포트로 소켓을 지정한다. 호스트는 localhost (127.0.0.1)
- 클라이언트의 연결 요청을 accept() 메서드를 통해 허용한다.
- DataInputStream 을 통해 입력을 받는다.
- “End” 문자열이 들어오면 연결을 종료한다.
public class ServerTest {
private Socket socket = null;
private ServerSocket server = null;
private DataInputStream input = null;
public ServerTest(int port) {
try {
server = new ServerSocket(port);
System.out.println("Server Started");
System.out.println("Waiting for a client");
socket = server.accept();
System.out.println("Client Accepted");
input = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
String s = "";
while (!s.equals("End")) {
s = input.readUTF();
System.out.println(s);
}
System.out.println("Closing Connection");
socket.close();
input.close();
} catch (IOException e) {
System.out.println("IO Exception");
}
}
public static void main(String[] args) {
ServerTest server = new ServerTest(3000);
}
}
Resources
반응형
'Java' 카테고리의 다른 글
자바의 Stream (1) | 2024.02.29 |
---|---|
자바의 제네릭 (Generic) (1) | 2024.02.28 |
자바의 직렬화 (Serialization) (0) | 2024.02.22 |
자바의 Collection Framework (1) | 2024.02.20 |
자바의 메모리 관리 (1) | 2024.02.13 |