Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Wechseln der ZielIP nicht möglich?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 < [ 3 ]
010
04.07.2007, 14:17 Uhr
~Horst
Gast


Wenn ich noch etwas hinzufügen darf...

heisst das dann auch, das ich wärend ich mich in der Schleife befinde, keine anderen Clients auf den Server zugreifen können, richtig?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
04.07.2007, 14:44 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


darum gibts 2 varianten:

nach dem accept für jeden client forken (bzw allgemein neuen thread für den client aufspannen) oder nur gepollt arbeiten (also immer prüfen "ist was für den client da, wenn nicht, am nächsten weiterprüfen") kommt aber eben immer auf die Anwendung drauf an.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
04.07.2007, 14:56 Uhr
~Horst
Gast


Oh, okay ja, das klingt auf jedenfall nach dem was ich brauch, aber könntet ihr mir da ein bisschen helfen, ich denke den Servercode zu Posten das bekomm ich hin.
Wenn es erstmal nichts ausmacht, mache ich das mal in Pseudocode, ist der zu
unschlüssig, werde ich das gesammte Teil posten, dazu muss aber auch die Serverklasse hier her glaube ich ... obwohl die Namensgebung eigentlich weitgehend selbsterklärend ist.

OKAY hier ich versuche es mal und hoffe dann, das ihr mich ein bissl unterstützt, sodass mehrere Clients auf meinen Server zugreifen können.
Ich habe es bis jetzt mit nem Thread gelöst soweit.


Code:
Execute()
     {
              socket
                  
                   setsockopt(Server
                                    SOL_SOCKET,
                                    SO_REUSEADDR,
                                    NULL,
                                    NULL)
                  
                   bind
                   listen

              while(Terminated == false)
              {
                        connect = accept(server)
                        
                        /* Empfangen und so weiter */

                        close connect
              }
                        close server
          }

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
04.07.2007, 14:57 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)



Zitat von ~Horst:
Aber ist das dann so, wenn ich also den Clientsocket schliesse, dass dann in dem Serverbeispiel aus der Whileschleife gesprungen wird oder sehe ich das falsch?

Nein warum solltest du aus der Schleife fliegen? Das passiert nur wenn accept einen Fehler zurückliefert.

Wenn der Client die Verbindung schließt werden halt alle deine recv/send Aufrufe einen Fehler verursachen den du abfangen solltest und wenn das der Fall ist zum Beispiel continue aufrufen um zum nächsten Schleifen durchlauf und somit zum nächsten accept zu gelangen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
04.07.2007, 16:54 Uhr
~Horst
Gast


@Guybrush Threepwood

Ja das gibt sinn!

Aber um auf den Code einzugehen den ich zuvor gepostet habe,
will ich darauf hinweisen, das es bei genau diesem Code nicht funktioniert einen Client
Connecten zu lassen, dann den Clientsocket sterben zu lassen und nochmal darauf zu Connecten oder auf einen anderen mit dem selben Serverprogramm, wobei das
so weit ich weis, keinen unterschied macht ob ich nun auf dne Selben oder verschiedene
versuch hintereinander zu connecten.

Dort liegt gerade mein hauptsächliches problem.
Es geht nur so weit das ich ihn Sterben lasse kann, aber weiter gehts nicht.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
04.07.2007, 17:33 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Was heißt denn "geht nicht"? Was bekommst du denn für eine Fehlermeldung bzw. Rückgabewerte?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
04.07.2007, 18:37 Uhr
~Horst
Gast


Mit "Geht nicht" meine ich, etwas ziemlich bescheuertes.
Wenn, das hätte ich besser gleich sagen sollen glaube entschuldigt...

Nun, nachdem ich also auf den Button klicke der eine neue IP zuweisst und diese dann Connected wird, passiert mit dem Sever etwas seltsames.
Er läuft die ganze Zeit durch Recv durch als würde dauerhaft etwas ankommen.
Was ankommt sind aber NULL's ( "\0" ).
Die gibt er auch aus und zwar ZIEMLICH schnell.
Das ergibt dann ein endloses Ausgeben.


Ich habe auch ein paar Fehlercode überprüfungen gemacht und es kamen nach
folgenden Befehlen folgende Errorcodes:

Beim neu verbinden des Clients durch einen Button (mit diesen Befehlen) kommt:
close(client)
Code: 0 (alles gut )

übergabe der IP.
code: 6 (Den versteh ich nicht ganz, kommt aber immer auch beim ersten start.)

connect(client)
code: 10038 (... hm)


Nun zu den codes des Servers nachdem der Client den Server wechselte:
Alle 0, kein Fehler.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
017
04.07.2007, 18:49 Uhr
~Horst
Gast


Äh, ich hoffe es ist klar von welchen Codes ich spreche.
Den WSAGetLastErrors !
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
018
04.07.2007, 19:07 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


MSDN sagt dazu folgendes:

Zitat:

WSAENOTSOCK
10038
Socket operation on nonsocket.
An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
019
04.07.2007, 19:44 Uhr
~Horst
Gast


ja genau, ich hab danach auch schon geschaut, aber ich verstehe das nicht wieso das kommt, hierfür könnte ich ja mal den pseudocode für den
Button schicken, der ist ja überschaubar:


Code:
          closesocket(clientsocket)
          neue IP einfügen              /* Es iwrd auch nochmal Port reingeschrieben und ebenfalls
                                                  das Protokoll (TCP) */
          connect(clientsocket)

 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 < [ 3 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: