[Day 13] 국비 0413 - 내용 정리
🌞java.net
- 네트워크 프로그래밍과 관련한 클래스들을 모아놓은 패키지
🌈InetAddress
- 인터넷 상의 주소를 표현하기 위한 클래스
- InetAddress는 생성자가 제공되지 않으면 static 메소드를 통하여 객체를 생성할 수 있다.
🌈URL
- 인터넷 상의 문서의 위치를 표현하기 위한 클래스
🌞통신 프로그램
- 네트워크 상에 있는 두 대의 컴퓨터가 서로 데이터를 주고받는 프로그램
🌈통신과 관련된 기본 용어
- ip주소 : 인터넷상의 수 많은 컴퓨터들 중에 특정 컴퓨터를 구별하기 위한 식별자
- port 번호: 하나의 컴퓨터에서 동시에 여러 개의 네트워크 프로그램이 실행할 수 있다. 이 때에 특정 프로그램을 구별하기 위한 식별자
- 서버: 서비스를 제공하는 컴퓨터 혹은 프로그램
- 클라이언트: 서비스를 제공받는 컴퓨터 혹은 프로그램
- 메아리: 수신한 데이터를 그대로 데이터를 보낸 쪽으롤 내보내는 것
- 방송: 수신한 데이터를 연결된 모든 컴퓨터에게 내보내는 것
🌈통신하는 방식
🍁TCP 방식
- 통신하고자 하는 컴퓨터와 연결을 먼저 맺은 후에 상대방 컴퓨터가 데이터를 받을 준비가 되어있는지 확인한 후, 데이터를 주고 받는 방식
- 현실에서의 "전화"와 비슷한 개념
🍁UDP 방식
- 통신하고자 하는 컴퓨터와 연결을 맺지 않고 상대방 컴퓨터가 데이터를 받을 준비가 되어있는지 확인 없이 데이터를 전달하는 방식
- 현실에서의 "편지"와 비슷한 개념
🌈통신방식에 따른 자바가 제공하는 클래스
🍁TCP 방식
- ServerSocket
- Socket
🍁UDP 방식
- DatagramSocket
- DatagramPacket
🌈TCP 방식의 네트워크 프로그래밍 절차
서버 클라이언트
1. ServerSocket 생성
2. 클라이언트가 접속할 때 까지 무한 대기상태
3. Socket객체를 생성하여 통신을 요청
4. 통신을 수락
5. 데이터를 주고받을 스트림을 생성 데이터를 주고받을 스트림을 생성
6. 데이터를 주고받는다. 데이터를 주고받는다.
7. 사용했던 자원을 닫아준다. 사용했던 자원을 닫아준다.
🌈UDP
🍁UDPSender
192.168.0.2 / 9001 안녕? //sender가 보내주면
🍁UDPReceiver
안녕? //receiver가 받아서 출력
🌞예제
🌟(InetAddress)예제1🌟
import java.net.InetAddress;
public class InetAddressTest {
public static void main(String[] args) {
try {
InetAddress addr = InetAddress.getByName("www.naver.com"); //네이버 닷컴의 ipadress 정보를 확인할 수 있다.
System.out.println(addr);
} catch (Exception e) {
System.out.println("예외발생: " + e.getMessage());
}
}
}
🌟(TCPClient)예제2🌟
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class TCPClient {
public static void main(String[] args) {
try {
// 3. 서버에게 통신을 요청한다.
Socket socket = new Socket("192.168.0.2", 9000); // ip주소와 포트번호 9000번 (server에서 설정해줌) //cmd에서 확인한 아이피주소를
// 적어준다.
// 5. 데이터를 주고받을 스트림을 생성
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// 6. 데이터를 주고받는다.
for(int i=1; i<=10; i++) {
int n = is.read(); //수신된 데이터를 읽어옴.
System.out.println("서버로 부터 수신된 데이터: " +n);
Thread.sleep(200);
}
// 7. 사용했던 자원을 닫아준다.
is.close();
os.close();
socket.close();
} catch (Exception e) {
System.out.println("예외발생: " + e.getMessage());
}
}
}
🌟(TCPServer)예제3🌟
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
public class TCPServer {
public static void main(String[] args) {
Random r = new Random(); //랜덤 생성
try {
// 1. ServerSocket을 생성한다.
ServerSocket server = new ServerSocket(9000);
// 2. 클라이언트의 접속이 있을 때 까지 무한 대기상태
while (true) {
// 4. 클라이언트의 접속을 수락한다. (반환하는 메소드 Socket)
Socket socket = server.accept(); // 소켓 객체를 반환한다.
System.out.println("** 클라이언트가 연결하였습니다. **");
// 5. 데이터를 주고받을 스트림을 생성
InputStream is = socket.getInputStream();
OutputStream os = socket.getOutputStream();
// 6. 데이터를 주고받는다.
// 연결한 클라이언트한테 정수 난수 10개를 만들어 보내주도록 하자.
for(int i=1; i<=10; i++) {
//0에서 100사이의 난수를 만들자.
int n = r.nextInt(100);
System.out.println("서버에서 난수를 만들었습니다. " + n);
//만들어진 난수를 클라이언트한테 보낸다.
os.write(n); //정수를 내보냄
Thread.sleep(200); //0.2초 정도의 대기시간
}
System.out.println("클라이언트에게 데이터를 모두 내보냈습니다.");
// 7. 사용했던 자원을 닫아준다.
is.close();
os.close();
socket.close();
}
} catch (Exception e) {
System.out.println("예외발생: " + e.getMessage());
}
}
}
Author And Source
이 문제에 관하여([Day 13] 국비 0413 - 내용 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rlaehdus0417/Day-13-국비-0413-내용-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)