DSP將原始以太網數據包發送到PC比捕獲這些數據包併發送ack響應的PC。他們將MAC消息發送給MAC,因此沒有ip層。我想每隔1ms發送一次實時消息。 DSP每1毫秒發送一次消息,但PC不能在1毫秒內捕獲消息併發送應答。捕獲和發送數據包需要15 - 30 ms。這個結果對我來說太慢了。我怎樣才能讓這個更快。我使用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);
}
}
您是否真的需要爲每個發送的數據包打開和關閉設備? –
沒有必要,你是對的吉姆,我修好了。 –