C Netzwerkprogrammierung - erste Schritte



  • Hi,

    ich hoffe das Thema ist nich offtopic aber da es sich um ein C problem handelt ist es in diesem Channel wohl am besten aufgehoben.
    Unzwar arbeite ich grade an meinem ersten C programm das eine primitive Netzwerkanbindung hat.
    Dabei läuft auf dem Serversystem eine Webcam, die ihre Daten durch den gstreamer an einen client schickt, damit dieser das Bild anzeigen kann oder was auch immer damit getan werden soll. Paralell dazu gibt es auch noch einen Infochannel über dem Befehle oder Informationen vom Server zum Client geschicht werden können oder umgekehrt.
    Wie gesagt läuft der Server in C, der Client hingegen läuft in Java.

    Im grunde funtkioniert das ganze auch ganz gut. Ich kann verbinden und erhalte Bilder sowieso Informationen und kann auch Befehle Senden.
    EIn Problem bekomme ich jedoch, wenn ich den Client prozess einfach kille. Dann wird der Server aus mir bis jetzt noch unergründlichen Gründen nemich auch sofort beendet, was im Grunde auch das Problem ist, weswegen ich hier im Hilfe frage. Da ich noch nicht so sicher in C und dem Verhalten im Netzwerk bin, habe cih die Befürchtung, dass es ein recht banaler Grund sein könnte.

    http://pastebin.com/m1b26c0b1 in diesem File werden in Zeile 90 und 138 die beiden Server für Daten und Informationen geöffnet. Beide Prozeduren werden als Threads gestartet und laufen nebeneinander.
    Gibt es dort vielleicht schon einen Fehler den ich gemacht habe?

    Ich finde das ganze ziemlich verwirrend, da sich das Programm wirklich einfach beendet und nichtmal eine Ausgabe gibt. Ich kann jedoch definitiv sagen, dass das Programm nicht am Ende des Programms ankommt, daran liegt es nicht.
    Es ist, also würde irgendwo exit() ausgeführt werden, sobald client beendet wird.

    Ich hoffe mit den Informationenn lässt sich überhaupt etwas anfangen. Ich bin mir nicht sicher, wie ich die Daten eines solchen Projektes sonst zur Vefrügung stellen kann, will euch ja hier schließlich kein Archiv mit dem ganzen Projekt aufs Auge drücken. Wenn aber noch irgendwas zu wissen ist, ich werd es sogut wie möglich zur verfügugn stellen.

    Gruß toti



  • Hast du dich schon mal mit einem Debugger an das Serverprogramm drangehängt und geschaut, wie der Zustand des Programmes ist (Variablen), wenn es abstürzt?



  • Hi,

    ich kenn mich mit gdb leider nicht aus, aber ich bekomme folgenden Output, der mir aber leider nicht so viel sagt, vielleicht kann mir ja hier jemand damit helfen:

    Nokia-N810-23-14:/home/user/perikles# gdb ./perikles
    GNU gdb 6.6-debian
    Copyright (C) 2006 Free Software Foundation, Inc.
    GDB is free software, covered by the GNU General Public License, and you are
    welcome to change it and/or distribute copies of it under certain conditions.
    Type "show copying" to see the conditions.
    There is absolutely no warranty for GDB.  Type "show warranty" for details.
    This GDB was configured as "arm-linux-gnueabi"...
    Using host libthread_db library "/lib/libthread_db.so.1".
    (gdb) run
    Starting program: /home/user/perikles/perikles
    Start Server [Data]
    Waiting for new connection [Data]...
    Start server [information]
    Waiting for new connection [information]...
    Current Socket 6 [information]
    Verbindung aufgebaut [information]
    Waiting for new connection [information]...
    Current Socket 8 [Data]
    Verbindung aufgebaut [Data]
    Waiting for new connection [Data]...
    <1> 1
    [New LWP 15870]
    <1> 3
    <1> 1
    <1> 3
    <1> 1
    <1> 3
    <1> 1
    [New LWP 15871]
    
    Program received signal SIGPIPE, Broken pipe.
    [Switching to LWP 15871]
    0x402e1a04 in send () from /lib/libpthread.so.0
    (gdb) next
    Single stepping until exit from function send,
    which has no line number information.
    [LWP 15871 exited]
    [LWP 15870 exited]
    
    Program terminated with signal SIGPIPE, Broken pipe.
    The program no longer exists.
    (gdb)
    

    Ich habe das Gefühl, dass das ganze mit Thread safeness zusammenhängen könnte, aber ich werd aus dem Output nicht ganz schlau, vielleicht mach ich auch beim debuggen selber was falsch. Hab das ganze mit dem Parameter -g compiled, dann sollten ja eigentlich debug Informationen vorhandenn sein.

    Gruß toti



  • Es sagt doch:

    Program terminated with signal SIGPIPE, Broken pipe.
    

    Ich würde in der Unix-Ecke nachfragen, was es mit SIGPIPE genau auf sich hat.
    Wahrscheinlich muß man nur angemessen darauf reagieren.


Anmelden zum Antworten