java 단방, 방송, 그룹 방송 상세 및 실례 코드

java 단방, 방송, 그룹 방송 상세 및 실례 코드
현재 인터넷 통신(TCP/IP도 예외가 아니다)에는 세 가지 통신 모델이 있는데 그것이 바로 단방, 방송, 그룹방송(멀티캐스트라고도 하는데 개인적으로 멀티캐스트라고 부르는 것은 적절하지 않다)이다. 그 중에서 멀티캐스트가 나타나는 시간이 가장 늦지만 단방과 방송의 장점을 동시에 갖추고 발전 전망이 가장 높다.   
하나.통신 방식 분류:
1. 단방: 한 대의 호스트와 한 대의 호스트 간의 통신;   
2. 방송: 단일 호스트와 네트워크의 모든 호스트의 통신;   
3. 그룹 방송: 한 대의 호스트와 선택한 한 그룹의 호스트의 통신;        
2.단독 방송:
단파는 인터넷 통신에서 가장 흔히 볼 수 있는 것으로 네트워크 노드 간의 통신은 마치 사람들 간의 대화와 같다.만약 한 사람이 다른 사람에게 말을 한다면,
그러면 인터넷 기술의 용어로 설명하면'단방'이다. 이때 정보의 수신과 전달은 두 노드 사이에서만 진행된다.   
1. 단독 방송의 장점:
(1) 서버 및 클라이언트의 요청에 응답하기;   
(2) 서버는 각 클라이언트의 서로 다른 요청에 대해 서로 다른 응답을 발송하여 개성화된 서비스를 표시하기 쉽다.   
2. 단방의 단점:
(1) 서버는 클라이언트당 데이터 흐름, 서버 흐름 = 클라이언트 수×클라이언트 트래픽;고객 수가 많고 모든 클라이언트 기기의 데이터가 많은 흐르는 미디어 응용에서 서버는 무거운 부담을 감당할 수 없다.   
3. 장면 적용:
단방은 네트워크에서 광범위하게 응용되었고 네트워크상에서 대부분의 데이터는 단방의 형식으로 전송되었다.예를 들어 전자 우편을 수발하고 웹 페이지를 유람할 때 반드시 전자 우편 서버와
서버가 연결을 하는데 이때 사용하는 것은 단방 통신 방식이다.   
셋.방송:
'라디오'는 예를 들면 한 사람이 라디오 스피커를 통해 그 자리에 있는 모든 사람에게 말할 수 있다.다시 말하면 방송은 호스트가 특정한 네트워크의 모든 호스트에 대해 데이터 패키지를 보내는 것이다.   
이 네트워크는 네트워크일 수도 있고, 시간 서브넷일 수도 있고, 모든 서브넷일 수도 있다.   
방송은 두 가지가 있는데 그것이 바로 로컬 방송과 정방향 방송이다.
정방향 방송: 데이터 패키지를 본 네트워크 이외의 특정 네트워크의 모든 호스트에 보내지만, 인터넷의 대부분 공유기가 정방향 방송 메시지를 전달하지 않기 때문에 깊이 있게 소개하지 않는다
로컬 방송: 데이터 패키지를 로컬 네트워크의 모든 호스트로 전송하고 IPv4의 로컬 방송 주소는 "255.255.255"이며 공유기는 이 방송을 전송하지 않습니다.   
1. 방송의 장점:
(1) 통신의 효율이 높기 때문에 정보는 한 네트워크의 모든 호스트에 단번에 전달될 수 있다.   
(2) 서버는 각 클라이언트에게 단독으로 데이터를 보내지 않기 때문에 서버 데이터가 비교적 부하가 적다.   
2. 방송의 단점:
(1) 네트워크의 대역폭을 매우 차지한다.   
(2) 목적성이 부족하고 호스트가 이 데이터를 받아야 하든 안 받아야 하든 간에 강제적으로 데이터를 수신한다.   
3. 장면 적용:
(1) 유선 텔레비전은 전형적인 방송형 네트워크이다
사.그룹 방송:
'조립방송'은 예를 들면 길거리를 향해'남자의 한 번이고 한 사람이 100위안을 보낸다'고 외치면 남자가 오면 여자는 오지 않는다. 돈이 없으면 그녀는 너를 거들떠보지도 않기 때문이다(조립방송: 그중의 모든 남자는 한 그룹이다). 다시 말하면 조립방송은 호스트가 지정한 호스트에게 데이터 패키지를 보내는 것이다. 만약에 단독 방송 방식을 사용하면 노드별로 전송되고 목표 노드가 얼마나 많은지.몇 차례의 전송 과정이 있을 수 있는데 이런 방식은 분명히 효율이 매우 낮기 때문에 취할 수 없는 것이다.대상을 구분하지 않고 모두 전송하는 방송 방식을 사용하면 한 번에 데이터를 전송할 수 있지만 특정 데이터 수신 대상을 구분하는 목적에 도달하지 못하고 네트워크 대역폭을 차지할 수 있다.그룹 방송 방식을 채택하면 1회 전송소를 실현할 수 있다
목표 노드의 데이터가 있으면 특정 대상에게만 데이터를 전송하는 목적을 달성할 수 있다.   
IP 네트워크의 그룹 방송은 일반적으로 그룹 방송 IP 주소를 통해 이루어진다.그룹 방송 IP 주소는 D클래스 IP 주소, 즉 224.0.0에서 239.255.255.255 사이의 IP 주소입니다.   
1. 그룹 방송의 장점:
(1) 방송이 가진 모든 장점을 갖추고 있다.   
(2) 단방에 비해 데이터 패키지를 발송하는 효율을 제공하고 방송에 비해 네트워크 데이터를 감소한다.   
2. 그룹 방송의 단점:
(1) 단방 프로토콜에 비해 오류 수정 메커니즘이 없고 패키지 오류가 발생하면 보완하기 어렵지만 일정한 오류 수용 메커니즘과 QOS를 통해 보완할 수 있다.   
5.인스턴스 적용:
1. UDP 단독 방송의 예

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
import java.net.InetSocketAddress; 
import java.net.SocketAddress; 
 
//   
public class ClientTest 
{ 
 private static final int MAXRECEIVED = 255; 
 
 public static void main(String[] args) throws IOException 
 { 
  byte[] msg = new String("connect test successfully!!!").getBytes(); 
 
  DatagramSocket client = new DatagramSocket(); 
 
  InetAddress inetAddr = InetAddress.getLocalHost(); 
  SocketAddress socketAddr = new InetSocketAddress(inetAddr, 8888); 
 
  DatagramPacket sendPacket = new DatagramPacket(msg, msg.length, 
    socketAddr); 
 
  client.send(sendPacket); 
 
  client.close(); 
 } 
} 
 
 
서버:

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.util.Arrays; 
 
//  
public class ServerTest 
{ 
 private static final int MAXREV = 255; 
 
 public static void main(String[] args) throws IOException 
 { 
  DatagramSocket server = new DatagramSocket(8888); 
  DatagramPacket recvPacket = new DatagramPacket(new byte[MAXREV], MAXREV); 
 
  while (true) 
  { 
   server.receive(recvPacket); 
 
   byte[] receiveMsg = Arrays.copyOfRange(recvPacket.getData(), 
     recvPacket.getOffset(), 
     recvPacket.getOffset() + recvPacket.getLength()); 
 
   System.out.println("Handing at client " 
     + recvPacket.getAddress().getHostName() + " ip " 
     + recvPacket.getAddress().getHostAddress()); 
 
   System.out.println("Server Receive Data:" + new String(receiveMsg)); 
 
   server.send(recvPacket); 
 
  } 
 
 } 
} 
2. UDP 방송의 예

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.net.InetAddress; 
 
//  
public class BroadcastSender 
{ 
 public static void main(String[] args) throws IOException 
 { 
  byte[] msg = new String("connection successfully!!!").getBytes(); 
  /* 
   *  Java UDP , ,  :  
   */ 
  InetAddress inetAddr = InetAddress.getByName("255.255.255.255"); 
  DatagramSocket client = new DatagramSocket(); 
 
  DatagramPacket sendPack = new DatagramPacket(msg, msg.length, inetAddr, 
    8888); 
 
  client.send(sendPack); 
  System.out.println("Client send msg complete"); 
  client.close(); 
 } 
} 

 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.DatagramSocket; 
import java.util.Arrays; 
 
//  
public class BroadcastReceive 
{ 
 public static void main(String[] args) throws IOException 
 { 
 
  DatagramPacket receive = new DatagramPacket(new byte[1024], 1024); 
  DatagramSocket server = new DatagramSocket(8888); 
 
  System.out.println("---------------------------------"); 
  System.out.println("Server current start......"); 
  System.out.println("---------------------------------"); 
 
  while (true) 
  { 
   server.receive(receive); 
 
   byte[] recvByte = Arrays.copyOfRange(receive.getData(), 0, 
     receive.getLength()); 
 
   System.out.println("Server receive msg:" + new String(recvByte)); 
  } 
 
 } 
} 
 3.UDP 그룹 방송의 예

import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.InetAddress; 
import java.net.MulticastSocket; 
 
//  
public class MulticastSender 
{ 
 public static void main(String[] args) throws IOException 
 { 
  int port = 8888; 
  byte[] msg = "Connection successfully!!!".getBytes(); 
 
  InetAddress inetRemoteAddr = InetAddress.getByName("224.0.0.5"); 
 
  /* 
   * Java UDP MulticastSocket , DatagramSocket , 
   *  . 
   * 
   *  : 
   * 
   *  DatagramSocket , 。 
   *  MulticastSocket, DatagramSocket  
   */ 
  MulticastSocket client = new MulticastSocket(); 
 
  DatagramPacket sendPack = new DatagramPacket(msg, msg.length, 
    inetRemoteAddr, port); 
 
  client.send(sendPack); 
 
  System.out.println("Client send msg complete"); 
 
  client.close(); 
 
 } 
} 

 
 
import java.io.IOException; 
import java.net.DatagramPacket; 
import java.net.InetAddress; 
import java.net.MulticastSocket; 
import java.util.Arrays; 
 
//  
public class MulticastReceive 
{ 
 public static void main(String[] args) throws IOException 
 { 
  InetAddress inetRemoteAddr = InetAddress.getByName("224.0.0.5"); 
 
  DatagramPacket recvPack = new DatagramPacket(new byte[1024], 1024); 
 
  MulticastSocket server = new MulticastSocket(8888); 
 
  /* 
   *  , ;  , ;  , ; 
   */ 
  server.joinGroup(inetRemoteAddr); 
 
  System.out.println("---------------------------------"); 
  System.out.println("Server current start......"); 
  System.out.println("---------------------------------"); 
 
  while (true) 
  { 
   server.receive(recvPack); 
 
   byte[] recvByte = Arrays.copyOfRange(recvPack.getData(), 0, 
     recvPack.getLength()); 
 
   System.out.println("Server receive msg:" + new String(recvByte)); 
  } 
 
 } 
} 

읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!

좋은 웹페이지 즐겨찾기