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));
}
}
}
읽어주셔서 감사합니다. 여러분에게 도움이 되었으면 좋겠습니다. 본 사이트에 대한 지지에 감사드립니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.