Socket Problem



  • Hallo an alle Linux-Fans,

    Ich habe einen server und einen client, und bin jetzt dabei Telephonie zu integrieren, Anrufbeantworter funktioniert bestens.

    Nun zu meinem Problem, Sockets sollten ja bidirektional sein, bei mir scheint es leider nicht so zu sein. Der Ablauf is der folgende:

    32 bits (Sound daten) von der ISDN-Karte an den Server
    Server sendet 32 bits an Client
    Client konvertiert 32 bits (von ulaw nach WAV)
    Client sendet 32 bits an den aRts sound Server (KDE Zeugs)
    Client bekommt 32 bits von dem sound Server (Mikrophon)
    Client konvertiert 32 bits (von WAV nach ulaw)
    Client sendet 32 bits an Server (zumindest sollte es)
    Server sendet 32 bits an die ISDN Karte

    Ihr könnt euch ausmalen, dass das ganze Drama sich im Millisekunden bereich abspielt. Lesen geht ohne Probleme, der Server bekommt die Daten, sendet die and den Client, der Client konvertiert die und der sound Server spielt die ordentlich ab. Das Problem kommt wenn der Client die Mikrophon Daten an den Server senden sollte, der Server-Socket nimmt die nicht an, obwohl der Client Daten hat.

    Ist die Zeitspanne zu kurz für den Socket um von Lesen nach Schreiben zu schalten?

    Muss ich einen zweiten Socket öffnen, dann wären einer für die eingehenden Daten und der andere für die ausgehenden zuständig. Aber wenn sich das vermeiden liesse wäre ich ganz froh.

    Hat jemand rat?

    Vielen Dank im Voraus.



  • funktioniert es denn, wenn du künstlich eine verzögerung einbaust? ausserdem sind sockets nicht standardmaessig bidirektional, zumindest nicht so, wie du dir das vorstellst. du kannst zwar senden und empfangen auf einem socket, aber das will getimed sein. wenn du sozusagen "event"-mässig (vgl. OnReceive in VCL/MFC) reagieren willst, musst du die sockets nonblocking machen, und per select auf aenderungen reagieren (damit kannst auch rausfinden, ob was rein oder rauskommt. wenn du das eh schon machst, dann hab ich kA 🙂



  • Was du machen willst nennt sich Voice over IP (VoIP).
    Schau dir mal die freien libs dazu an. IMHO brauchst du in diesem Fall 2 Sockets da es ja Realtime sein soll. (Fulldublex).

    Schreib mal genauer welchen Server du verwendest. HardwareISDN u.s.w.



  • Korbinian schrieb:

    funktioniert es denn, wenn du künstlich eine verzögerung einbaust? ausserdem sind sockets nicht standardmaessig bidirektional, zumindest nicht so, wie du dir das vorstellst. du kannst zwar senden und empfangen auf einem socket, aber das will getimed sein. wenn du sozusagen "event"-mässig (vgl. OnReceive in VCL/MFC) reagieren willst, musst du die sockets nonblocking machen, und per select auf aenderungen reagieren (damit kannst auch rausfinden, ob was rein oder rauskommt. wenn du das eh schon machst, dann hab ich kA 🙂

    Hab' ich schon probiert, ohne Resultate.



  • Unix-Tom schrieb:

    Was du machen willst nennt sich Voice over IP (VoIP).
    Schau dir mal die freien libs dazu an. IMHO brauchst du in diesem Fall 2 Sockets da es ja Realtime sein soll. (Fulldublex).

    Schreib mal genauer welchen Server du verwendest. HardwareISDN u.s.w.

    Also der server ist isdnserver, von mir programmiert, die ISDN Karte ist fullduplex und auch die Soundkarte. Der Klient ist kisdnmonitor, auch von mir.

    Ich denke das du Recht hast, ich muss wohl einen dritten Socket hinzufügen (einer für Kommandos, der zweite für die ausgehenden Audio Daten und der dritte für die Eingehenden. Sch**""e!


Anmelden zum Antworten