Java에서는 데이터를 보내고받는 여러 가지 방법이있을 수 있습니다. 일부 방법은 하단 계층에 더 가깝고 프로그래머 자체에 의해 일부 문제를 해결 해야하는 반면, 일부 방법은 추상화가 상대적으로 높으며 매우 편리하게 사용할 수 있습니다. 이러한 처리 방법은 추상화 수준에 따라 낮은 곳에서 높습니다.
1. 수동 인코딩 : 비트 작업을 사용하여 하나씩 인코딩하고 구문 분석합니다.
2. 스트림을 사용하여 자동으로 인코딩합니다. outputStream 및 BytearRayoutputStream을 사용하여 사용하십시오.
3. 직렬화 : 데이터를 데이터 객체에 넣고 객체를 직접 직렬화하고 보내십시오.
사용하기가 매우 편리하지만 효율성 상실에주의를 기울여야하며 수신기는 Java를 사용해야합니다.
4.RMI : 모든 통화를 메소드로 보내고 메소드의 원격 호출을 직접 구현하십시오.
최저 수준의 방법 1에서는 몇 가지 근본적인 문제를 해결해야합니다.
1. 정수 보내기 : 큰 꼬리 끝 또는 작은 꼬리 끝, 서명되지 않은 정수 또는 서명 된 정수인지 고려하십시오.
2. 문자열 보내기 : 인코딩 문제를 고려해야합니다.
3. 큰 정수와 같은 길이 제한이없는 유형 : 프레임 프레임을 인코딩하려면 각 프레임을 구분 기 또는 길이 비트로 구별합니다.
멀티 캐스트 및 방송
우리는 각 수신자에게 데이터 사본을 유니 캐스트 할 수 있지만 이는 매우 비효율적 일 수 있습니다.
UDP 소켓 만 방송 및 멀티 캐스트를 허용합니다. 이 둘의 차이점은 방송이 네트워크의 모든 도달 가능한 호스트로 전송 될 것이며 일부 운영 체제는 일반 사용자가 방송 작업을 수행 할 수 없다는 것입니다. 멀티 캐스트는 관심있는 호스트에게만 전송됩니다. 특히, 멀티 캐스트 그룹의 JoingRoup ()을 MultiCast 그룹의 호스트에 합류시킵니다.
public class multicastreceivertest {public static void main (string [] args)은 예외 {final inetAddress address = inetAddress.getByName ( "224.1.1.1"); 최종 int 포트 = 45599; for (int i = 0; i <5; i ++) {새 스레드 ( "스레드 #"+i) {@override public void run () {try {multicastsocket sock = new MulticastSocket (포트); sock.joingroup (주소); 바이트 [] msg = 새로운 바이트 [256]; Datagrampacket Packet = 새로운 Datagrampacket (msg, msg.length); SOOD.RECEIVE (패킷); System.out.println (thread.currentthread (). getName () + "수신 :" + new String (packet.getData ()); } catch (ioexception e) {e.printstacktrace (); } } } }.시작(); } thread.sleep (2000); MultiCastSocket Sock = New MulticastSocket (); SOCK.SETTIMETOLIVE (32); 바이트 [] msg = "hellomulticast".getBytes (); Datagrampacket Packet = 새로운 Datagrampacket (MSG, MSG.Length, 주소, 포트); 양말 (패킷); System.out.println ( "메시지 전송"); }}