본문 바로가기
카테고리 없음

[JAVA의 정석] Chapter16_연습문제

by cook_code 2024. 12. 15.
반응형
 

[16-1] ip주소가 192.168.10.100이고 서브넷 마스크(subnet mask)가 255.255.255.0일 때, 네트워크 주소와 호스트 주소를 계산하여 화면에 출력하는 프로그램을 작성하시오. 단, 비트연산자를 사용해서 계산해야 한다.

 

네트워크 주소 : 192.169.10.0.

호스트 주소 : 0.0.0.100.

 

public class Exercise16_1 {

	public static void main(String[] args) {
		byte[] ip = { (byte) 192, (byte) 168, (byte) 10, (byte) 100 };
		byte[] subnet = { (byte) 255, (byte) 255, (byte) 255, (byte) 0 };

		byte[] nwAddress = new byte[4]; // 네트워크 주소
		byte[] hostAddress = new byte[4]; // 호스트 주소

		System.out.print("네트워크 주소 : ");
		for (int i = 0; i < ip.length; i++) {
			nwAddress[i] = (byte) (ip[i] & subnet[i]); // &연산을 수행
			System.out.print((nwAddress[i] >= 0 ? nwAddress[i] : nwAddress[i] + 256) + ".");
		}

		System.out.println();

		System.out.print("호스트 주소 : ");
		for (int i = 0; i < ip.length; i++) {
			hostAddress[i] = (byte) (ip[i] & ~subnet[i]); // &연산을 수행
			System.out.print((hostAddress[i] >= 0 ? hostAddress[i] : hostAddress[i] + 256) + ".");
		}

		System.out.println();
	}
}
 

풀이

1. ip 배열과 subnet 배열을 각각 IP 주소와 서브넷 마스크로 초기화.
2. nwAddress 배열과 hostAddress 배열을 각각 네트워크 주소와 호스트 주소를 저장하는데 사용.
3. 네트워크 주소 계산:
각 바이트를 비트 AND 연산하여 네트워크 주소를 계산.
계산된 바이트를 출력. 음수 값이 발생할 수 있으므로, 이를 양수로 변환하여 출력.
4. 호스트 주소 계산:
각 바이트를 비트 NOT 연산 후 비트 AND 연산하여 호스트 주소를 계산.
계산된 바이트를 출력. 음수 값이 발생할 수 있으므로, 이를 양수로 변환하여 출력.
 

[16-2] 다음 중 TCP의 특징이 아닌 것은?

 

a. 전화와 같은 1:1 연결기반의 프로토콜이다.

b. 데이터의 전송순서가 보장된다.

c. UDP보다 전송속도가 빠르다.

d. 데이터의 수신여부를 확인한다.

 

c

 

풀이

c. UDP보다 전송속도가 빠르다
이 항목은 TCP의 특징이 아님. TCP는 데이터 전송의 신뢰성을 보장하기 위해 연결 설정, 데이터 확인, 오류 검출 및 복구 등의 과정을 거치기 때문에 UDP보다 전송 속도가 느림. UDP는 연결 설정이나 오류 검출을 하지 않기 때문에 속도가 더 빠름

----------------------------

a. 전화와 같은 1:1 연결기반의 프로토콜
TCP는 연결 지향적 프로토콜로, 데이터를 전송하기 전에 송신자와 수신자 간에 연결을 설정. 전화 통화와 유사한 방식

b. 데이터의 전송순서 보장
TCP는 데이터 패킷이 전송된 순서대로 도착하도록 보장. 패킷이 순서가 어긋나게 도착하면, TCP는 이를 재조립하여 올바른 순서로 데이터가 도착하도록 처리

d. 데이터의 수신여부 확인
TCP는 송신자가 전송한 데이터가 수신자에게 제대로 도착했는지 확인. ACK(응답) 메커니즘을 사용하여 데이터의 수신 여부를 확인
 

 

참고 : osi 7계층

 

tcp와 udp의 차이


[16-3] TextField에 URL을 입력하고 Enter키를 누르면 해당 페이지의 소스를 보여주는 'Source Viwer' 프로그램이다. 예제 15-4를 참고해서 (1)에 알맞은 코드를 넣어 완성하시오.

 

import java.net.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;

class SourceViewer extends Frame {
	TextField tf = new TextField();
	TextArea ta = new TextArea();
	Button saveButton = new Button("Save");

	SourceViewer(String title) {
		super(title);

		add(tf, "North");
		add(ta, "Center");
		add(saveButton, "South");

		tf.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				displaySource();
			}
		});

		saveButton.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent ae) {
				saveToFile();
			}
		});

		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent we) {
				System.exit(0);
			}
		});

		setBounds(500, 200, 500, 300);
		setVisible(true);
	}

	void displaySource() {
		URL url = null;
		BufferedReader input = null;
		String address = tf.getText().trim();
		String line = "";

		ta.setText("");

		try {
			if (!address.startsWith("http://") && !address.startsWith("https://"))
				address = "http://" + address;

			url = new URL(address);
			input = new BufferedReader(new InputStreamReader(url.openStream()));

			while ((line = input.readLine()) != null) {
				ta.append(line);
				ta.append("\n");
			}

			input.close();
		} catch (Exception e) {
			ta.setText("유효하지 않은 URL입니다.");
		}
	} // displaySource()

	void saveToFile() {
		FileDialog fileSave = new FileDialog(this, "Save File", FileDialog.SAVE);
		fileSave.setVisible(true);
		String fileName = fileSave.getDirectory() + fileSave.getFile();

		if (fileName != null) {
			try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) {
				writer.write(ta.getText());
			} catch (IOException e) {
				e.printStackTrace();
				ta.setText("파일 저장 중 오류가 발생했습니다.");
			}
		}
	}

	public static void main(String[] args) {
		SourceViewer mainWin = new SourceViewer("Source Viewer");
	}
}
 

테스트 한 url

- url 입력후 > enter > html 코드 따진거 확인 > save로 저장도 가능

 
네이버 블로그

당신의 모든 기록을 담는 공간

section.blog.naver.com


[16-4] 다음의 코드는 TCP통신을 하는 예제16-6, 16-7을 결합하여 GUI채팅프로그램을 작성한 것이다. (1)~(4)에 알맞은 코드를 넣어 프로그램을 완성하시오.

 

서버 실행 후 > client1, client2 실행 > 채팅 연결 확인

 
반응형