highJAVA

네트워크2

unemo 2020. 12. 16. 15:53
반응형

inet 어드레스


URL : 유니폼 리소스 로케이터

URI : 유니폼 리소스 아이덴티파이어 (식별자)

URI는  특정한걸 식별만할수있으면 URI라고 볼수잇음 URL은 접근해서 가져올수있어야함

URI 는 가 범위가 더 크다. 식별만 할수잇으면 URI가 될수있으니까

URL을 알고있으면 URI를 알고있는거니까 

URI ex) data.htm같은거임

사람들 이름도 URI 같은거임

 

 

TCP / UDP

여기서 OSI의 7레이어 이게 인터페이스설꼐해놓은거임.. 어떤 시스템이든 그 시스템 (간단하게는 컴터랑프린터연결이라든가..) 

물리적연결이 피지컬계층

실제연결했어. 데이터전송할거임 그런거담당이 datalink 대표적인게 pc에 랜카드 꼽혀있음 그 역할이 datalink, 구현되면 네트웍이 되는거

tcpid protocol suit 가 인터페이스바탕으로 실제 구현부임 실제 임플리먼트한부분 우리가 쓰는부분

우리가 보려고 하는게 transport부분의 tcp udp 임

transport단계에서는 상대방이 5개 던졌는데 내가 4개밖에 못받았아? 원인은 모르겠지만 ..암튼 불안함 내가 보내고나서 잘받았는지 확인하고싶다. 그 흐름제어를 하는게 transport 레이어임 이걸 실제 구현한게 tcp랑 udp라는 프로토콜

tcp랑 udp는 흐름제어를 제공해주는거임 좀더 데이터가 잘 가는거를 신뢰성있게 제공해주는거 (tcp)

udp는 못받으면 어쩔수없는거지... 걍 던져놓는거. 걍 택배 문앞에 던져두고 가는것

문앞에쪼그려기다리다가 받는거면 tcp (확실하다)

tcp가 무조건 좋냐? 그건 아님. udp에 비해서 신뢰성은 좋다. 데이터를 보내는.. 그 보낸데이터 덩어리?를 패킷이라고 하는데 첫번쨰 패킷, 두번째 패킷등을 조립을 다시 받아서 해야하는데 그 작업을 넘버링을 해서 조합해서 순서에맞춰서 조합하는데 그 기능까지도 tcp는 가지고있어서 신뢰성이 상승. 그래서 udp보다 속도가 상대적으로 느리다. 연결기반 (커넥션을 맺고 연결유지한상태에서 ! 대화하니까 연결기반) udp는 연결하고말고자시고 상대방이 받았든말든 일단 던져두고 튀튀하는거임 그래서 udp는 동영상스트리밍서비스하는데.. 동영상에서 몇프레임 빠지는건 중요하지않음 속도가 중요함 이럴때 udp프로토콜 쓰는거임

tcp는 10개던졌는데 5개밖에 못받았다? 그럼 조절해서 던지는 .. 10개 던졌는데 10개 다받으면 오? 하고 100개 던지고... 즉 상대방의 상황에 따라서 window.. 체크하는 로직까지도 수행할수있다.

근데 우리가 느낄만큼 느리지않기때문에 앵간한건 tcp쓴다.


우리는 tcp, udp 방식의 소켓 프로그래밍을 할 수 있다.

tcp방식 소켓통신할라믄 서버와 클라이언트 개념이 필요함 먼가 소켓만들고싶으면 상대방이 대기하고있어야함 그 대기하는게 서버임

서버에서 클라이언트들이 소켓전송을 요구할걸 예상하고 기다려야함

먼저 서버단 tcp방식 소켓프로그래밍 먼저하고 클라이언트단 소켓프로그래밍 할거임

 

서버측

package kr.or.ddit.tcp;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
//TCP방식의 소켓프로그래밍할때 필요한 두개의 클래스 (ServerSocket, Socket)
//ServerSocket (서버쪽에서 클라이언트의 소켓접속기다렸다가 소켓만들어서 던져주는역할하는넘)
//serversoket과 soket은 항상 둘이 같이 있어야 소켓프로그래밍할수잇음
public class TcpServer {
	public static void main(String[] args) throws IOException {
		//TCP 소켓통신을 하기 위해 ServerSocket객체 생성
		ServerSocket server = new ServerSocket(7777);
		System.out.println("서버가 접속을 기다립니다...");
		//accept()메서드는 Client에서 연결요청이 올 때까지 계속 기다린다.
		//연결요청이 오면 Socket객체를 생성해서 Client의 Socket과 연결한다.
		Socket socket =server.accept();
		//스레드가 서버소켓만들고.. 내려와서 server.accept하는순간
		//가만히있음..스레드가 사실상 block상태임 언제까지? 상대방이 소켓접속을 요청할때까지
		//접속요청이 왔어! accept가 Socket을 리턴해주니까 소켓객체를 만들어서
		//리턴하는거임 상대방의 소켓객체와 통신할수있는 소켓객체를 만들거임
		//블락된 메인스레드도 풀리면서 runnable로 실행이 된다... 이제야 다음줄로 넘어갈 수 있다.
		//블락된게 풀렸다 ?? = 상대방과 통신할수있는 소켓이 만들어졌다.
		
		//---------------------------------------------------------
		//이 이후는 클라이언트와 연결된 후의 작업을 진행하면 된다.
		System.out.println("접속한 클라이언트 정보");
		System.out.println("주소 : "+ socket.getInetAddress());
		
		//Client에게 메시지 보내기
		
		//OutputStream객체를 구성하여 전송한다.
		//접속한 Socket의 getOutputStream()메서드를 이용하여 구한다.
		//보낼거니까 outputstream...
		OutputStream out = socket.getOutputStream();
		DataOutputStream dos = new DataOutputStream(out);
		dos.writeUTF("☆★어서오십쇼....☆★");//메세지 보내기
		System.out.println("메시지를 보냈습니다.");
		
		server.close();
	}
}

ㅇ클라이언트측

package kr.or.ddit.tcp;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
import java.net.UnknownHostException;

public class TcpClient {
	public static void main(String[] args) throws UnknownHostException, IOException {
		String serverIp = "127.0.0.1";
		//자기 자신 컴퓨터를 나타내는 방법
		//IP : 127.0.0.1
		//컴이름 : localhost
		
		System.out.println(serverIp + " 서버에 접속 중입니다.");
		
		//소켓을 생성해서 서버에 연결을 요청한다.
		Socket socket = new Socket(serverIp, 7777);
		
		//연결이 되면 이후의 명령이 실행된다.
		System.out.println("연결되었습니다...");
		
		//서버에서 보내온 메세지 받기
		//메세지를 받기 위해 InputStream객체를 생성한다.
		//Socket의 getInputStream()메서드 이용
		InputStream is = socket.getInputStream();
		DataInputStream dis = new DataInputStream(is);
		
		//서버로부터 받은 메시지 출력
		System.out.println("받은 메시지 : " + dis.readUTF());
		
		System.out.println("연결종료.");
		
		dis.close();
		
		socket.close();
	}
}
반응형

'highJAVA' 카테고리의 다른 글

RMI(Remote Method Invocation) 원격 함수 호출  (0) 2020.12.18
JAVA IO  (0) 2020.12.04
클래스다이어그램  (0) 2020.12.04
log4J, 유즈케이스다이어그램  (1) 2020.12.03
Ibatis  (1) 2020.12.02