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 ]
000
03.07.2007, 19:01 Uhr
~Horst
Gast


Wenn ich versuche, ein zweitesmal die IP in meinem Programm zu ändern,
kann das Programm keine verbindung mehr aufbauen.
Die erste IP-zuweisung geht ohne probleme.

So viel zu meinem Problem.

Schicken geht beim ersten mal verbinden, verbinde ich aber ein
zweitesmal geht es nichtmehr.
Da es so viel Code ist, da lass ich es lieber aus, diesen zu Posten.

Mich würde nur interesieren, was ich genau tun soll, um meinem Client einen neuen Server
zuzuordnen wärend er läuft. Was muss ich beachten? Was muss ich tun?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.07.2007, 19:26 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


socket vorher schließen evtl?
ohne code kann man ansonsten nur spekulieren
--
class God : public ChuckNorris { };

Dieser Post wurde am 03.07.2007 um 19:26 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.07.2007, 20:35 Uhr
~Horst
Gast


Ja, das habe ich versucht, da lief ich aber auf Grund ...
Aber sag mal, meinst du mit Socket schliessen nur closesocket oder muss ich
da noch mehr beachten damit der Socket sauber wie im anfang ist?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
04.07.2007, 11:12 Uhr
virtual
Sexiest Bit alive
(Operator)


Dein Problem kann auch mit fehlerhaften Flags beim Erstellen des Sockets bzw. beim bind zu tun zu haben (Reuse-Address gesetzt?). Außerdem stellt sich bei hohem socketverbrauch in einer Anwenung ein Linux deutlich störrischer an als ein Windows.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
04.07.2007, 12:26 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


naja ein


Pseudocode:

for(;;) {
  socket(...)
  connect(...)
  send/recv(...)
  closesocket(...)
}



funktioniert aber eigentlich selbst unter linux. Einzige Problem könnte sein das dir das close erst schließt wenn die puffer verschickt worden sind (bzw der verbindungstimeout "eingeschlagen" hat). normalerweise sollte das aber kein problem sein da du beim rausconnecten ja eigentlich kein bind machst
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
04.07.2007, 12:45 Uhr
~Horst
Gast


Zu virtual:

Was meinst du mit Reuse-adress?
Hört sich so an als wäre das eine Fehlerquelle die ich nicht ausschliesse, ich habe von dem Flag noch nichts gehört!
Kann das zu Problemen kommen wenn ich mehrmals auf den gleichen Server Connecten will?
(Der selbe fehler tritt nämlich auch auf, wenn ich nochmal versuche, nach versenden, auf localhost zu connecten)

Zu Flosoft:

Ja so mache ich das ganze auch, aber es scheint nicht damit getan zu sein einfach den
Serversocket zu schliessen aber wenn ich auf virtual hinweisen könnte, ich habe noch nicht bedacht das es am Server liegen könnte!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
04.07.2007, 13:30 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


hi beim server musste natürlich folgendes machen:



Pseudocode:

socket
bind
listen

while(client = accept(server))
{
  send/recv(client...)
  closesocket(client)
}

closesocket(server)



da solltest du das serversocket natürlich nicht schließen, das bleibt sonst erst mehrere minuten im "timeout"-state. da hilft dann höchstens vor dem bin ein setsockopt mit SO_REUSEADDR, mit der er dann auf timeout-stehende sockets trotzdem binden kann.
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
04.07.2007, 13:42 Uhr
~Horst
Gast


Das könnte mein Fehler sein!
Ich glaub da habe ich etwas misinterpretiert!
Also muss ich immer wenn ich etwas empfangen hab einfach überprüfen lassen,
ob der Client noch da ist? (Mit dem Accept()?)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
04.07.2007, 13:54 Uhr
Guybrush Threepwood
Gefürchteter Pirat
(Operator)


Nein, mit accept nimmst du eine neue Verbindung zu einem Client entgegen. Diese bleibt solange bestehen bis du sie von einer Seite geschlossen wird.

Das send/recv in Flos Beispiel ist ja nur ein Platzhalter für deine gesammte Kommunikation zwischen dem Server und dem Client.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
04.07.2007, 14:15 Uhr
~Horst
Gast


Ja das meinte ich damit, nur halt anders gesagt !
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?
 
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: