2014-02-12 3 views
1

UDP 소켓을 열고 들어오는 데이터 그램을 수신 대기하는 응용 프로그램을 MATLAB에 작성했습니다. 기본적으로 다음과 같은 내용이 있습니다 :멀티 캐스트 UDP 주소 청취

u = udp(rHost, rPort, 'LocalHost', lHost, 'LocalPort', lPort); 
u.DatagramAvailableFcn = @(o,e) operateOnData(o,e); 
fopen(u); 

유니 캐스트 방식으로 뭔가 듣고있을 때 멋지게 작동합니다. 하지만 이제는 멀티 캐스트 트래픽을들을 수 있기를 원합니다. 분명히 this isn't possible in MATLAB입니다.

해결 방법은 해결 방법은 UDP 멀티 캐스트에 연결하는 것처럼

, 당신은 다음을 수행 할 수 있습니다, 위의 링크 당입니다 :

  1. 를 사용하여 자바 멀티 캐스트 소켓 것은 액세스 할 수 MATLAB에서 직접. 자세한 내용은 Sun의 "core java.net"클래스에 대한 javadoc 또는 자습서, 특히 "java.net.MulticastSocket"을 참조하십시오. 나는

http://java.sun.com/j2se/1.4.2/docs/api/java/net/MulticastSocket.html

자바에는 배경이 그래서 이것은 나를 위해 투쟁하지 않은 : 이것은에서 볼 수 있습니다. 난 단지는 A MulticastSocket 객체를 생성하려면 다음을 실행 할 수있었습니다 :

나는 주위를 둘러 보았다 실제로 들어오는 스트림을 포함에 나는 또한 java.net.Datagram 개체를 필요로 발견
>> ms = javaObject('java.net.MulticastSocket'); 

.

MulticastSocketDatagram 개체는 MATLAB의 맥락에서 어떻게 사용합니까? u.DatagramAvailableFcn의 기능을 복제하려고합니다. 즉, 수신 한 데이터 그램의 내용에 대해 작동하도록 콜백을 시작합니다.

편집는 : 자바의 관점에서 this is how I want to go about this 것 같은데,하지만 지금은 다음으로, 나는 성공적으로 가입하고 멀티 캐스트 스트림에서 패킷을받은

답변

0

MATLAB-땅으로이 다시 ... 얻고있다 :

socket = java.net.MultiSocket(streamPort); 
socket.joinGroup(java.net.InetAddress.getByName(streamIP)); 
socket.setReuseAddress(1); 

packet = java.net.DatagramPacket(zeros(1, intmax('uint16'), 'int8'), intmax('uint16')); 

socket.receive(packet); 

socket.leaveGroup(InetAddress.getByName(streamIP)); 
socket.close; 

msg = packet.getData; 
msg = msg(1:packet.getLength); 

이것은 본질적으로 MathWorks File Exchange에서 제공되는 judp에서 해제되었습니다.

나는 여전히 socket.receive 호출이 시간 초과 될 때까지 블로킹 된 것처럼 보입니다. 지금은 DatagramReceivedFcn과 같은 것을 얻는 방법을 찾고 있습니다. timer 개체를 정기적으로 "콜백"을 실행하는 데 사용할 수 있지만, 당연히 DatagramReceivedFcn과 같은 것은 아닙니다.

관련 문제