La comunicazione Java UDP è interrotta su macOS?

1

Ho cercato di capire perché un programma Java che usa la comunicazione UDP su Windows funzioni al 100%, ma sembra che i pacchetti vengano regolarmente rilasciati su una build macOS della JVM (8.x).

Ho visto un altro thread su StackExchange che non è mai stato veramente risposto, ma sembra che una delle persone abbia notato anche un problema simile su OSX.

Non ho il firewall standard abilitato nelle preferenze né credo di avere alcuna impostazione di rete speciale che interromperà i datagrammi UDP. Inoltre, se eseguo lo stesso programma su un VM Windows 7 tramite VirtualBox sullo stesso hardware, il programma funziona perfettamente.

Qualche idea su cosa cercare o se si tratta di un problema noto?

UPDATE 2018-11-24: Ulteriori dettagli. Sto eseguendo Java 1.8.0_92-b14 da Oracle su MacPro3,1 e macOS 10.13.6. Il programma che sto utilizzando è ADTPro 2.0.2 come server ethernet che tenta di comunicare con un vecchio Apple // e che ha un Uthernet II che esegue l'altro lato di ADTPro. È un software per trasferire immagini su disco da / verso le macchine.

Il problema è che i trasferimenti spesso scadono e si interrompono e sembra che i pacchetti si stiano perdendo e il codice non sia abbastanza sofisticato da correggere errori e inviare nuovamente / riprovare. Guardando il codice sorgente, sembra che tutto sia in UDP che solleva sicuramente i sospetti. Secondo il maintainer su GitHub, il fatto che stia usando UDP è storico e nessuno ha fatto il lavoro per convertire a TCP. Dato che il software funziona bene parlando con una macchina Windows con lo stesso software e le stesse versioni di Java, suppongo che sia qualcosa con macOS o la build Java di OSX e mi chieda se qualcuno sa come determinare per certo o no. Ti aiuta?

    
posta bjb 23.11.2018 - 18:09
fonte

1 risposta

0

No - UDP non è fondamentalmente rotto su macOS (o su qualsiasi altro AppleOS)

Dato che UDP sono pacchetti unicast e anche noti come pacchetti di dati inaffidabili, il mio primo tentativo di risolvere questo problema sarebbe quello di stabilire che lo switch e il router stiano effettivamente consegnando i pacchetti all'interfaccia macOS.

Wireshark o uno strumento di gestione sulla tua rete sarebbe il posto dove registrare questi pacchetti per vedere se vengono consegnati.

Non mi preoccuperei delle persone che dicono che TCP è più o meno affidabile di UDP dato che una buona implementazione di UDP è molto meglio di un'implementazione errata e si è sul percorso corretto che si concentra su un'applicazione java specifica che consuma dati su un Mac specifico nella tua rete. Molti dei tuoi dettagli sono buoni, ma è un po 'come descrivere la pressione delle gomme e il colore della vernice quando hai effettivamente bisogno di sapere se l'autista ha preso la strada giusta.

Sei in grado di eseguire Wireshark e verificare i pacchetti o accedere ai registri di rete per verificare il mittente e potresti anche dover fare una piccola ricerca su UDP e porre una domanda a seguire se si tratta in realtà di più del networking.

risposta data 24.11.2018 - 17:47
fonte

Leggi altre domande sui tag