Socket UDP Client reagiert nicht auf spontane Meldungen

delphinis

Mitglied
UDP Client reagiert nicht auf spontane Meldungen

Hallo,
mein (UDP) Client funktioniert so weit recht gut. Nur etwas stört mich noch:
Er reagiert zwar auf eine spontane meldung vom Server (was er für meine Applikation auch soll), aber nur wenn ich schon mal eine Request gesendet habe.
Beim Debuggen sehe ich, dass das Programm nach dem connecten auf der Zeile
Java:
byte[] rec = udpClient.recieveFrom(connectAddress, connectPort);
stehen bleibt, wie erwartet.
Trotzdem reagiert receive from nicht auf die (spontane Startup-) Message von meinem Device!
Sende ich nun ein Request an das Device, kommt ordnungsgemäss die Response.
Mache ich ein erneutes Reset auf dem Device, damit dieses wieder eine (spontane Startup-) Message schikt, wird diese plötzlich auch empfangen. (Spontane meldungen sind also möglich; ist ja auch "nur" UDP)

=> Es scheint, dass ich zuerst eine Meldung schicken muss, bevor ich eine empfangen kann!?

hier mal der Code des Receive-Threads:
Java:
class RecieceThread implements Runnable {    
    @Override public void run() {
      while (true) {
        synchronized(this) {
          if ((udpClient != null) && (!udpClient.isClosed())) {
            try {
                byte[] rec = udpClient.recieveFrom(connectAddress, connectPort);
                System.out.println(rec.length);
                String s = bytesToHexString(rec, ' ');
                recTextArea.append(s + "\n");            
                System.out.println(s);
            } catch( Exception e ) {
              e.printStackTrace();
              System.out.println("ReceiveThread Error: " + e);
            }  
          }
        }
      }  
    }
  }

hat jemand eine Idee?
 

Sen-Mithrarin

Gesperrter Benutzer
1) was ist "udpClient" und was macht die methode "receiveFrom()" ?
davon ausgehend das du "receive" falsch geschrieben hast würde ich behaupten irgendwas was du selbst geschrieben hast > code posten !
2) wie sprichst du das ganze an ? direkt 1-1 oder hängt da irgendein netzwerk oder gar NAT-router zwischen ?

zu wenig code und info
 

delphinis

Mitglied
Hallo Sen-Mithrarin,
also, udpClient ist ein DatagramClient welcher ein DatagramSocket enthält. Der Socket wird mit dem lokalen IP und Port initialisiert. Die Methoden in DatagramClient sind sendto() und receiveFrom (ich hab das "receive" bei dieser Gelegenheit aktualisiert http://www.java-forum.org/images/smilies/biggrin.gif )
Hier mal der Code von der Klasse von udpClient:
Java:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class DatagramClient {
  private final static int PACKETSIZE = 100;
  DatagramSocket socket = null ;
  
  DatagramClient(int localPort, InetAddress localIP) throws Exception {
    socket = new DatagramSocket(localPort, localIP) ;
  }
  
  public void close() {
    socket.close();
  }
  
  public boolean isClosed() {
    if (socket == null) return true;
    return socket.isClosed();
  }
  
  public void sendto(byte[] data, InetAddress host, int port) {
    try {
      DatagramPacket packet = new DatagramPacket(data, data.length, host, port) ;
      socket.send(packet) ;// Send it    
    } catch (Exception e) {
//      logTextArea.append(e.toString() + "\n");
    }
  }
  
  public byte[] receiveFrom(InetAddress host, int port) throws Exception {
    byte[] recArray = {};
      byte [] data = "".getBytes();
      DatagramPacket packet = new DatagramPacket(data, data.length, host, port) ;
      packet.setData(new byte[PACKETSIZE]);
      // Wait for a response from the server
      socket.receive(packet);
      if (packet.getLength() == PACKETSIZE) throw new RuntimeException("Possible truncation of UDP packet. (max length = " + PACKETSIZE + ")");
      recArray = new byte[packet.getLength()];
      for (int i=0; i<recArray.length; i++) {
        recArray[i] = packet.getData()[i];
      }
    return recArray;
  }
}
Der Client wartet blockierend auf eine Meldung vom Socket (Deshalb ist er auch in einem separaten Thread).

Zum ansprechen:
Das ganze ist in einem sehr kleinen Lan mit 3 beteiligten (normaler switch). Aber auch mit direktem Ansprechen (1:1) ist das Resultat das selbe.
 

Sen-Mithrarin

Gesperrter Benutzer
ok, nur damit ich das richtig verstehe :

du bist bereit daten auf einem UDP-port zu empfangen
ein anderer netzknoten sendet dir dann auf diesem port an deine ip daten
dazwischen hängt in dem sinne nichts (in diesem fall ist es egal ob man mit nem cross-over-kabel zwei system direkt verbindet (werden die heute eig noch gebraucht ?) oder über einen switch/hub/repeater/router ... da dieser nur die internen segmente verbindet)
meldet sich der netzknoten empfängst du dessen udp-paket nicht
wenn du aber vorher einen request absetzt dann bekommst du nachfolgende daten

um hier den fehler genauer zu lokalisieren teste das ganze mal wenn wireshark läuft und guck ob die udp-pakete die dein java-code nicht erhält überhaupt am rechner ankommen und dort einfach nur geschluckt werden ... oder ob sich die daten schon im netzwerk verlieren



woran ich erst dachte : NAT
es hörte sich halt so an als würde da ne NAT zwischen hängen die halt erstmal ein paket rausschicken muss um daten zu empfangen (so in richtung udp hole punching)
 

delphinis

Mitglied
Hallo Hallo Sen-Mithrarin,
die Meldungen hab ich schon mit dem Wireshark untersucht und gesehen, dass das Packet ankommt, nur eben mein Socket reagiert mit der ersten Meldung nicht, obwohl er geöffnet ist.
Ich könnte natürlich auch erst mal eine Test Request machen, aber ich hasse workarounds ;-)
Na ja, ist ja auch nicht so tragisch, hatte nur gehofft, dess jemand grad ne Idee hat, der sich mit Sockets auskennt.
 
Zuletzt bearbeitet:

Sen-Mithrarin

Gesperrter Benutzer
es fällt mir erst jetzt auf wo ich was von SO gelesen habe
du verkomplizierst die sache einfach nur unnötig ... drück es doch mal auf einfachheit runter

also z.b. nur "new DatagramSocket(port)" um den socket an die wildcard zu binden

oder auch das packet : einfach nur "new DatagramPacket(byte[], in)"

es kann nämlich sein das du mit deinen "speziellen" kontruktoren irgendwelche rules erzeugst die dafür sorgen das du nur schlecht / nicht empfangen kannst ...


drücks wie gesagt einfach mal runter auf ein wirklich einfaches beispiel ohne den ganze localIP krams und remoteHost und soweiter ... und prüf mal ob es dann läuft

wenn das UDP laut wireshark ankommt kann es nur noch daran liegen das der code die annahme verweigert oder sich am OS nicht richtig meldet um die daten zu empfangen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
B Axis2 Webservice mit Client Zertifikat Authentifizierung Netzwerkprogrammierung 3
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
T Jetty mit Client-Zertifikat nur bei spezifischer URL Netzwerkprogrammierung 1
J Einlesen von Servernachrichten von TCP-Client Netzwerkprogrammierung 17
J Client-Server und SOAP Netzwerkprogrammierung 23
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
T Client zu Client Kommunikation Netzwerkprogrammierung 2
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
G Server-Client IO Problem Netzwerkprogrammierung 6
ruutaiokwu ständig "sender address rejected: improper use of smtp" bei smtp-client Netzwerkprogrammierung 4
J HTTP [Java 9] Neuer HTTP Client - Tutorial Netzwerkprogrammierung 3
A Chatserver/-client - Code stoppt bei readUTF() Netzwerkprogrammierung 7
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
L Zugriffprobleme Client - Webservice AspenTechnology Netzwerkprogrammierung 0
A Client Client Übertragung Netzwerkprogrammierung 12
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
K Socket Netty Client wirft Fehler! Netzwerkprogrammierung 3
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
U Client Soap Verbindung wieder schließen Netzwerkprogrammierung 0
U Socket Client mit hash authentifizieren Netzwerkprogrammierung 3
F HTTP HTTP Rest Client mit TLS1.2 und selbst signiertem Zertifikat Netzwerkprogrammierung 2
P Server als Client nutzen Netzwerkprogrammierung 8
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
J Client - Serversocket Netzwerkprogrammierung 1
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
N Fragen zu Sockets Client Netzwerkprogrammierung 3
F Extasys TCp Client extends Funktion Netzwerkprogrammierung 0
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
O Client zwischen XML und JSON auswählen lassen Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
A Socket Wie ein einfacher Multithreads Service mit Telnet als Client mit Observable/Observer gelöst.... Netzwerkprogrammierung 0
K C# Server - Android Client Netzwerkprogrammierung 0
T Application Client NullPointerExc Netzwerkprogrammierung 7
V TCP Client funktioniert auf Emulator aber nicht auf Smartphone Netzwerkprogrammierung 5
H Machbarkeitsfrage: TCP/IP Client (z.B. Netty) für Java Web Applcation Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
H HTTP REST Jersey - PUT-Beispiel von Client senden Netzwerkprogrammierung 0
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2
H Socket Client/Server Socket Programmieren Netzwerkprogrammierung 1
M Theoretische Frage zu Server - Client Netzwerkprogrammierung 2
P HTTP Server / Client Netzwerkprogrammierung 1
N FTP FTP Client invalid IPv6 address (Apache Commons Net API) Netzwerkprogrammierung 6
F TCP Client, verbindung aufrecht halten Netzwerkprogrammierung 0
X RMI: Woher kennt der Client das Schnittstellen-Interface? Netzwerkprogrammierung 2
E Thematik Client server Netzwerkprogrammierung 2
D UDP Client empfängt nichts Netzwerkprogrammierung 2
D Client/Server per Crossover Lan Kabel Netzwerkprogrammierung 1
S Client Server Connection Netzwerkprogrammierung 4
V erste Client - Server Anwendung, paar Fragen wie Socketverbindung checken usw. Netzwerkprogrammierung 4
S Client Anwendung mit zentraler SQL-Datenbank Netzwerkprogrammierung 3
N Client Identifikation eines Servers Netzwerkprogrammierung 1
S Sichere Server/Client Architektur Netzwerkprogrammierung 1
D Chat Server/mehre Client Netzwerkprogrammierung 9
I Server+Client Netzwerkprogrammierung 3
N Client am Server abmelden Netzwerkprogrammierung 0
F Server/Client Probleme Netzwerkprogrammierung 3
D SSH Client Netzwerkprogrammierung 7
U Socket Instant Messanger (Server Linux, Client Windows) Netzwerkprogrammierung 1
B TCP Client Android Netzwerkprogrammierung 3
Athena Grundsatzfragen zu Client-Server-Architektur / Matchmaking Netzwerkprogrammierung 1
A Problem beim Senden von Client zu Server Netzwerkprogrammierung 10
F Client Server DB Netzwerkprogrammierung 0
A Verständnisfrage Multi-Threaded Client/Server Netzwerkprogrammierung 5
F Tipps zum Thema Server/Client vie SOAP Netzwerkprogrammierung 0
OnDemand Ist Client noch angemeldet? Netzwerkprogrammierung 7
F Socket Java - Server/Client simple Netzwerkprogrammierung 1
R Zeitliche Syncronisation Server - Client Netzwerkprogrammierung 0
S Server-Client: Image senden Netzwerkprogrammierung 2
C Multithreading Client / Server erklärt Netzwerkprogrammierung 11
M Client sendet nur, wenn das Socket geschlossen wird Netzwerkprogrammierung 53
P server - client verbindung (anfänger) Netzwerkprogrammierung 8
S Socket (client) verbindet nicht Netzwerkprogrammierung 6
V Templates für Java Client rabbitmq Netzwerkprogrammierung 4
J Client Server - Serialisierung Netzwerkprogrammierung 8
C Client connection per Portforwarding auf einen lokalen Serverport Netzwerkprogrammierung 3
Luk10 Server / Client: Clients speichern! Netzwerkprogrammierung 6
M allgemeine Frage über Server-Client-Kommunikation Netzwerkprogrammierung 5

Ähnliche Java Themen

Neue Themen


Oben