WinSockets Problem die ach was weiß ich denn...



  • So willkommen im Thread in dem es um ein ganz neues Thema geht: WinSockets!

    Habe da wie viele andere ein Problem: und zwar, wenn ich mein Client/Server-Programm starte, dann muss immer die 2. Instanz des Programms Client sein. Wenn ich die 1. Instanz dann schließe und eine neue (3.) öffne, kann nicht die 3. Instanz der Client sein, sondern immer nur noch die 2.. Das geht immer so weiter. Wenn ich dann die 2. schließe, verbinden sich die Programme immer nur noch mit sich selbst...die 2. Instanz hingegen, verbindet sich nie mit sich selbst.
    Hier mal eine kleine Übersicht, wobei der erste der Client, und der 2. der Server ist:

    1. -- 1.
    2. -- 1.
    2. -- 3.
    2. -- ...
    3. -- 3.
    

    Also was ich damit sagen will ist, dass immer nur die 2. Instanz der Client ist/sein kann. Weiß jemand warum das so ist?

    Mfg Ominion



  • falls du das alles auf einem rechner machst: es kann nur ein programm den port zum lauschen öffnen. die anderen erst wieder, wenn der erste 'lauschsocket-prozess' weg ist. dann gewinnt der schnellste und alle anderen müssen warten...



  • ja mache ich, allerdings war das bei tests auf anderen compis genauso...
    warum ist dann eigentlich das zweite schneller, obwohl ich das erste als erstes getsartet habe?

    EDIT: ist schwachsinn, der letzte teil meine ich



  • naja, ich weiss ja nicht wie du's gemacht hast. das einfachste prinzip ist: es gibt nur einen server und alle anderen connecten sich auf den (müssen also seine ip-adresse und port-nummer kennen). wenn bei dir jeder gleichzeitig client und server sein kann, dann brauchste eventuell eine art master-server der die anderen server steuert. das kann ziemlich kompliziert werden. im lokalen netz könnteste sowas ähnliches z.b. mit broadcasts machen. dabei sendet jeder grundsätzlich an alle, aber das bringt wieder andere problemchen mit sich... 😉



  • ich probiere noch ein bisschen rum...vielleicht kommt mir ja ein geistes blitz...



  • Ominion schrieb:

    vielleicht kommt mir ja ein geistes blitz...

    du kriegst das schon hin... 🙂



  • habe da noch einmal eine frag: und zwar, wenn ich das eine programm schließe, dann versucht der thread mit recv () drinne, immer noch nachrichten zu empfangen und piept dank der tollen funktion Beep () wie irre. Allerdings nur wenn ich mich trenne! Wenn ich verbunden bin, dann piept er nur, wenn eine Nachricht reinkommt, so wie es auch sein soll. Also wie kann ich das empfangen beenden, wenn ich ein prog richtig geschloßen, also die verbindung gekappt habe? ich muss immer erst auf senden drücken, bis er merkt, dass nichts mehr da ist, weil er ja nicht weiß wohin er senden soll. hat da jemand rat?

    PS: sry wenn es ein bisschen unverständlich ist, aber ich bin scho müde und gehe jetzt auch ins bettchen^^



  • wenn die gegenstelle einen normalen 'disconnect' gemacht hat (tcp verbindung vernünftig geschlossen wurde bzw. 'shutdown' aufgerufen hat) dann gibt ein blocking recv 0 zurück. daran kannste's erkennen (also nicht nur bei SOCKET_ERROR, was ja auf einen fehler hinweist)...
    also rückgabewert von recv():

    0 ------------- daten empfangen
    SOCKET_ERROR --- irgendwas dummes ist passiert
    0 -------------- disconnect

    btw: das findeste auch alles in der socket-doku 😉



  • ja sry, 0 ist eigentlich auch logisch...bin bloß schon zu müde...


Anmelden zum Antworten