2016-04-18 8 views
-4

Ich führe gerade eine Anwendung auf RedHat aus, die ein Problem verursacht. Ich habe zwei Computer, die beide RedHat ausführen und UDP-Sockets für die Kommunikation verwenden.RedHat Socket empfängt keine Pakete

Socket ist korrekt auf beiden Seiten erstellt und der Client den Server ordnungsgemäß gebunden. Wenn der Client eine Nachricht sendet, kann ich sehen, dass die Nachricht mit TCPDump auf der Serverseite korrekt empfangen wird, aber die Funktion Receive() auf dem Socket nie aufgerufen wird und die Anwendung nichts tut.

Wenn ich es auf localhost mache, funktioniert die Anwendung großartig.

Hat jemand eine Idee von wo könnte das Problem sein?

+0

Wenn die Funktion 'Receive()' nie aufgerufen wird, warum überrascht Sie, dass die Nachricht nicht empfangen wird? – EJP

+0

Nun, ich bin überrascht, weil das Paket vom Server (mit tcpdump) mit der korrekten Portnummer wirklich gut empfangen wird, aber nichts passiert. Es sollte normalerweise in die Receive-Funktion eingeben, anstatt nichts zu tun, ich hoffe, Sie verstehen, was ich meine –

+0

Was 'Receive()' Funktion sprechen Sie? Wäre es der Code, den Sie nicht veröffentlicht haben? Das wird über eine Kette von Ereignissen erreicht, die Sie nicht offengelegt haben? – EJP

Antwort

2

Wenn Sie tcpdump ausführen, versuchen Sie tatsächlich zu verstehen, ob das Paket den Zielcomputer erreicht hat, nicht das eigentliche Ziel (d. H. Die Anwendung, die gerade abhört, also Ihr Serverprogramm). tcpdump kann nur garantieren, dass das Paket den Server erreicht hat und der TCP-Stack es hat. Jetzt ist es Ihre Anwendung (d. H. Server-Programm), es zu verbrauchen. Dies kann nur passieren, wenn recv() erfolgreich ist. Sie können den Fehler hinter allen Socket-Funktionen immer verstehen und notwendige Korrekturmaßnahmen durchführen.