DSP가 패킷 캡처 및 패킷 전송 속도를 PC에 보내는 것보다 PC에 원시 이더넷 패킷을 보내고 이러한 패킷을 캡처하고 응답 응답을 보낼 수 있습니다. 그들은 IP 계층이 없도록 MAC에서 MAC로 메시징합니다. 나는 매 1ms마다 실시간 메시징을 만들고 싶다. DSP는 1 밀리 초마다 메시지를 보내지 만 PC는 메시지를 포착하고 1 밀리 초 미만의 응답을 보낼 수 없습니다. 패킷 포착 및 전송에는 15 - 30ms가 소요됩니다. 이 결과는 나에게 너무 느리다. 어떻게하면 더 빨리 만들 수 있을까요? jpcap 라이브러리 및 운영 체제 Win XP x32를 사용하고 있습니다.jpcap
캡처 코드 :
private void captor() {
try {
captor = JpcapCaptor.openDevice(cf.getDevice(), 100, true, 1);
} catch (Exception ex) {
Logger.getLogger(CapturingPacket.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void capturing() {
Packet packet = captor.getPacket();
if (packet != null) {
if (packet.data.length > 0) {
EthernetPacket ethernetPacket = (EthernetPacket) packet.datalink;
String receivedDestMac = Common.byteToMacStringFormat(ethernetPacket.src_mac);
if (definedDestMac.equals(receivedDestMac)) {
captured(packet.data);
}
}
}
}
private class captureRunner implements Runnable {
public void run() {
captor();
while (running) {
capturing();
try {
Thread.sleep(0);
} catch (InterruptedException err) {
}
}
}
}
보내기 코드 :
이private void send(byte[] message) {
try {
JpcapSender send = JpcapSender.openDevice(cf.getDevice());
Packet packet = new Packet();
//ethernet frame
EthernetPacket ethernetPacket = new EthernetPacket();
// #dst_mac
ethernetPacket.dst_mac = getDestMac();
// #src_mac
ethernetPacket.src_mac = cf.getDevice().mac_address;
// #frametype
ethernetPacket.frametype = Common.ETHERNET_FRAME_TYPE;
// #data
packet.data = message;
// datalink
packet.datalink = ethernetPacket;
send.sendPacket(packet);
send.close();
} catch (Exception ex) {
Common.showErrorMessage("Send Error");
Logger.getLogger(MessagingPacket.class.getName()).log(Level.SEVERE, null, ex);
}
}
보낸 패킷마다 장치를 열고 닫아야합니까? –
필요하지 않습니다. 당신 말이 맞습니다. Jim, 고쳐주었습니다. –