UDP paketinden bilgi almayı deniyorum ancak rastgele çıktı almaya devam ediyorum. Bazen tam olarak ne istediğimi alırım ve diğer zamanlarda yapmam. Ben sunucuya bir UDP paket göndermek için komutu dig @localhost -p 1299 test.mydomain.abc
kullanmakUDP paketini ayrıştırdıktan sonra çöp çıkışı
private static void receivePacket()
{
try {
DatagramSocket socket = new DatagramSocket(port);
System.out.println("\n Listening...");
while(true)
{
// Create a packet
DatagramPacket packet = new DatagramPacket(new byte[1024], 1024);
// Receive packet
socket.receive(packet);
byte[] data = packet.getData();
// Parse the packet
parse(data, packet.getLength());
socket.send(packet);
}
} catch(Exception e) {
e.printStackTrace();
}
}
// Parse packets
private static void parse(byte [] data, int dataLength)
{
ArrayList<String> name = new ArrayList<String>()
String domain = "";
// Get ID
int id = ((data[0] & 0xff) << 8) + (data[1] & 0xff);
System.out.println("\n ID:\t\t" + id);
// Get domain name and number of bits for each word in domain
for(int i = 0; i < dataLength; i++)
{
// If the next bit is a letter then we know the current bit is the number of bits
if((data[i] <= ' ') || (data[i] > '~'))
{
try {
if((String.format("%c", data[i+1]).matches("^[a-zA-Z]$")))
{
int dSize = Integer.parseInt(String.format("%d", data[i]));
name.add(Integer.toString(dSize));
}
} catch (Exception e) {
//e.printStackTrace();
}
}
else
{
// If current bit is letter add to ArrayList
try {
if((String.format("%c", data[i]).matches("^[a-zA-Z]$")))
{
name.add(String.format("%c", data[i]));
domain += String.format("%c", data[i]);
}
} catch (Exception e) {
//e.printStackTrace();
}
}
}
System.out.println(" Domain:\t" + domain);
System.out.print(" Name:\t\t");
name.add("0");
for(int i = 0; i < name.size(); i++)
System.out.print("\'" + name.get(i) + "\' ");
System.out.println();
}
:
İşte benim kodudur. İşte altı kez çalıştırdıktan sonra çıkışım. Çıktı, her zaman aşağıdaki (ID değişir) olmalıdır: Eğer çalışma # başlayarak burada gördüğümüz gibi
ID: 64666
Domain: testmydomainabc
Name: '4' 't' 'e' 's' 't' '8' 'm' 'y' 'd' 'o' 'm' 'a' 'i' 'n' '3' 'a' 'b' 'c' '0'
'Tamamen rastgele ve ben don nedenini anlamak. Bunu Java ve Windows 10'da kodluyorum. Herhangi bir yardım takdir edilecektir, teşekkür ederim!
Ham Veriler:
Başarılı deneme: Başarısız '4' 't' 'e' 's' 't' '8' 'm' 'y' 'd' 'o' 'm' 'a' 'i' 'n' '3' 'a' 'b' 'c' '0'
b7 01 20 00 01 00 00 00 00 00 01 04 t e s t 08 m y d o m a i n 03 a b c 00 00 01 00 01 00 00) 10 00 00 00 00 00 00 00
: '-127' 'f' '4' 't' 'e' 's' 't' '8' 'm' 'y' 'd' 'o' 'm' 'a' 'i' 'n' '3' 'a' 'b' 'c' '0'
81 f 01 20 00 01 00 00 00 00 00 01 04 t e s t 08 m y d o m a i n 03 a b c 00 00 01 00 01 00 00) 10 00 00 00 00 00 00 00
edilecek sorunun ağda veya ayrıştırma algoritmanızda gerçekleşip gerçekleşmediği. (ve tabii ki de soru gövdesine eklemek faydalı olacaktır) – snickers10m
Aradığınız şey bu olduğundan emin değilim, ancak aldığım tüm bitleri ekledim. –
Doğru yolda. Beklenen çıktıyı üreten bir deneme için ham veriyi ve kötü çıktı üreten bir deneme için ham verileri istiyorum. Sonra ikisini karşılaştırabiliriz (ve bulduğumuz problemleri çözmek için ayrıştırma algoritmanızı geliştiririz). – snickers10m