JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=334a8336afff10cf0287394f94830f21Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

WinSocks beim start starten...
Gehe zu Seite Zurück  1, 2, 3  Weiter
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 14.11.2007, 18:01    Titel: Antworten mit Zitat

PeaceKiller hat Folgendes geschrieben:
http://msdn2.microsoft.com/en-us/library/ms737625.aspx

Zitat:
If the application is using WSAAsyncSelect to indicate interest in connection events, then the application will receive an FD_CONNECT notification indicating that the connect operation is complete (successfully or not).


ja^^ das dumme ist nur das ich die ganze Zeit eine FD_CONNECT message bekomme^^, selbst wenn kein Server da ist ^^

Hier der komplette Source vom Clienten:
http://nopaste.com/p/avSrghNvD
http://nopaste.com/p/aNzR5ZIV6
http://nopaste.com/p/aIcIu57rN
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 14.11.2007, 20:57    Titel: Antworten mit Zitat

mmh …
Zitat:
Whether the operation eventually succeeds or not, when the outcome has been determined, FD_CONNECT happens. The client should check the error code to determine whether the outcome was successful or failed.


Kriegst du da noch irgendwelche anderen Parameter mit?

Hab halt sowas auf Windows noch nicht richtig gemacht, aber vielleicht spiele ich mir nochmal Visual Studio auf.
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 14.11.2007, 21:28    Titel: Antworten mit Zitat

PeaceKiller hat Folgendes geschrieben:
mmh …
Zitat:
Whether the operation eventually succeeds or not, when the outcome has been determined, FD_CONNECT happens. The client should check the error code to determine whether the outcome was successful or failed.


Kriegst du da noch irgendwelche anderen Parameter mit?

Hab halt sowas auf Windows noch nicht richtig gemacht, aber vielleicht spiele ich mir nochmal Visual Studio auf.


ehm ich weiß jetzt nicht genau was du meinst..
FD_CONNECT ? oda wie?
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Faller
Junior JLI'ler


Alter: 36
Anmeldedatum: 30.11.2006
Beiträge: 88
Wohnort: Dresden
Medaillen: Keine

BeitragVerfasst am: 15.11.2007, 10:17    Titel: Antworten mit Zitat

Ich hatte auch mal ein hauffen problem mit sockets jetze hab ich es ein bischen drauf aber hier mal den thread.

http://www.jliforum.de/board/viewtopic.php?t=4866&highlight=

gehe wenn dus lernen wilst auf diese seite
www.c-worker.ch
dort läds du dir glaube das 4 beispiel das ist ein super mini cleint auf tcp.

mit dem soltest du eigentlich arbeiten können und so verändern können das du ne windows fenster dahinter legst.

mit der hofnung geholfen zu haben
MFG Faller
_________________
versuche alles nur wann und wie ist die frage
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 15.11.2007, 19:41    Titel: Antworten mit Zitat

Faller hat Folgendes geschrieben:
Ich hatte auch mal ein hauffen problem mit sockets jetze hab ich es ein bischen drauf aber hier mal den thread.

http://www.jliforum.de/board/viewtopic.php?t=4866&highlight=

gehe wenn dus lernen wilst auf diese seite
www.c-worker.ch
dort läds du dir glaube das 4 beispiel das ist ein super mini cleint auf tcp.

mit dem soltest du eigentlich arbeiten können und so verändern können das du ne windows fenster dahinter legst.

mit der hofnung geholfen zu haben
MFG Faller


thx aba das habe ich schon durchgelesen Wink

Habe jetzt einen neuen thread für Connect angelegt, weil man mit FD_CONNECT anscheinend nixx anfangen kann -.-

Funktioniert auch ganz gut aba irgendwas habe ich in der Schleife falsch gemacht und finde den Fehler einfach nicht:

CPP:
DWORD WINAPI ThreadFunktion(LPVOID param)
{
   while(test2 == SOCKET_ERROR)
   {
      test2 = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN));
      if(test2 == SOCKET_ERROR)
      {
         AddText("Fehler: Connection gescheitert!");
         Sleep(1000);
      }
      else
      {
         AddText("Verbunden mit 127.0.0.1 .!");
         return 1;
      }
   }
   return 0;
}


Also wenn man den Server zuerst an macht und danach den Clienten, dann funktioniert auch alles richtig. Also er sagt:
"Verbunden mit 127.0.0.1 .!"

Aber wenn ich zuerst den Clienten an mache und danach den Server, dann sagt er immer: "Fehler: Connection gescheitert!"
Doch der Server sagt das eine Verbindung akzeptiert wurde und der Client hat sogar "Hallo" geschickt, obwohl der Client die ganze zeit "Fehler: Connection gescheitert!" ausgibt -.-

Also irgendwie ist das komisch.... Liegt es evtl daran das die variable "test2" global ist??? Aber local kann ich da keine Variale anlegen....
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 15.11.2007, 20:15    Titel: Antworten mit Zitat

Also ich würde den Thread ja so machen:

CPP:
DWORD WINAPI ThreadFunktion(LPVOID param)
{
   while(test2 == SOCKET_ERROR)
   {
      AddText("Warte auf Verbindung");
      test2 = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN));
      Sleep(1000);
    }
   
   AddText("Verbunden mit 127.0.0.1 .!");
   return 0;
}

Wird dien Problem zwar irgendwie noch nicht beheben, aber so gehts jedenfalls.

Und mit select hat connect überhaupt nicht funktioniert?
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 15.11.2007, 20:25    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
Also ich würde den Thread ja so machen:

CPP:
DWORD WINAPI ThreadFunktion(LPVOID param)
{
   while(test2 == SOCKET_ERROR)
   {
      AddText("Warte auf Verbindung");
      test2 = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN));
      Sleep(1000);
    }
   
   AddText("Verbunden mit 127.0.0.1 .!");
   return 0;
}

Wird dien Problem zwar irgendwie noch nicht beheben, aber so gehts jedenfalls.


Jo das ist besser ^^ aba löst halt nicht das problem Sad

Jonathan_Klein hat Folgendes geschrieben:
Und mit select hat connect überhaupt nicht funktioniert?


man kann select auch bei connect() einsetzen???
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 15.11.2007, 21:14    Titel: Antworten mit Zitat

glaub schon. Den imo ist select genau dafür da, zu gucken ob ein potentiell blockierender Funktionsaufruf blockieren würde. Gäbe es ne Funktion, die blockieren kann, aber mit select nicht getestet werden kann, wäre select irgendwie unzureichend...
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 15.11.2007, 21:25    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
glaub schon. Den imo ist select genau dafür da, zu gucken ob ein potentiell blockierender Funktionsaufruf blockieren würde. Gäbe es ne Funktion, die blockieren kann, aber mit select nicht getestet werden kann, wäre select irgendwie unzureichend...


Jo habe grade festgestellt, dass wenn ich WSAAsyncSelect() weglasse funktioniert meine connect-Funktion im Thread richtig (!!)

rofl... dann muss ich wohl select() benutzen^^ ist aber voll kompliziert irgendwie -.-
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 36
Anmeldedatum: 17.02.2003
Beiträge: 3431
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 16.11.2007, 15:34    Titel: Antworten mit Zitat

spricht ja nu nix dagegen, sich selbst ein paar Vereinfachungen zu tippen.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 16.11.2007, 17:09    Titel: Antworten mit Zitat

Sooo..... Habe Problem gelöst (Aber habe wieder ein weiteres Problem, siehe unten)
Aber nicht mit select() (sry Jona xDD kann einfach nicht locker lassen...)

Wenn ich zuerst WSAAsyncSelect() aufgerufen habe und danach connect(), dann sendet er IMMER eine FD_CONNECT Message.
ABER wenn ein Fehler beim Verbinden aufgetreten ist, dann füllt er den WORD: wError = WSAGETSELECTERROR(lParam); mit dem error.

Und dann kann man das ganz einfach mit einer if Anweiung checken:
CPP:
case FD_CONNECT:

                     if (wError)
                        {
                           AddText("Warte auf Verbindung");
                           connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN));
                           return TRUE ;
                        }
                        
                         AddText("Verbunden mit 127.0.0.1 .!");
                         return 0;


Ohne das ich irgendwelche threads oder Schleifen brauche, weil FD_CONNECT ja immer aufgerufen wird sobald man die Funktion connect() ausgeführt hat^^

Jedoch bin ich mir nicht ganz Sicher was das angeht weil bei FD_CLOSE klappt das dummerweise nicht -.-

CPP:
                  case FD_CLOSE:
                     AddText("Verbindung abgebrochen!");
                     connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN));


Weil Wenn Client und Server miteinander verbunden sind und der Server plötzlich off geht, dann muss der Client ja weiter prüfen ob eine Verbindung besteht , falls der Server wieder online geht
Aber wenn ich in der message connect() ausführe, dann wird komischerweise keine FD_CONNECT Nachricht geschickt
Weiß vllt einer woran das liegen kann???
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 16.11.2007, 17:20    Titel: Antworten mit Zitat

RebornX hat Folgendes geschrieben:
Jedoch bin ich mir nicht ganz Sicher was das angeht weil bei FD_CLOSE klappt das dummerweise nicht -.-

CPP:
                  case FD_CLOSE:
                     AddText("Verbindung abgebrochen!");
                     connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR_IN));


Weil Wenn Client und Server miteinander verbunden sind und der Server plötzlich off geht, dann muss der Client ja weiter prüfen ob eine Verbindung besteht , falls der Server wieder online geht
Aber wenn ich in der message connect() ausführe, dann wird komischerweise keine FD_CONNECT Nachricht geschickt
Weiß vllt einer woran das liegen kann???


Freut mich, dass es jetzt soweit geht. Was gibt denn dein connect-Aufruf zurück?

Generell solltest du immer alle Rückgabewerte von Netzwerkfunktionen überprüfen. Gerade bei Netzwerkdingen trifft Murphys Gesetz ganz besonders zu!
_________________
»If the automobile had followed the same development cycle as the computer, a Rolls-Royce would today cost $100, get a million miles per gallon, and explode once a year, killing everyone inside.«
– Robert X. Cringely, InfoWorld magazine
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 16.11.2007, 17:55    Titel: Antworten mit Zitat

PeaceKiller hat Folgendes geschrieben:

Freut mich, dass es jetzt soweit geht. Was gibt denn dein connect-Aufruf zurück?

Generell solltest du immer alle Rückgabewerte von Netzwerkfunktionen überprüfen. Gerade bei Netzwerkdingen trifft Murphys Gesetz ganz besonders zu!


JO hätt ich selber dran denken sollen^^

naja als erstes gabs den Fehler:
Zitat:
Socket is already connected.

Dann habe ich closesocket(s) aufgerufen, danach hatte ich gleich nen Weiteren Fehler:
Zitat:
Socket operation on nonsocket.

Dann habe ich Socket s nochmal neu erstellt und jetzt kriege ich die richtige fehlermeldung:
Zitat:
Connection refused.

ABER FD_CONNECT WIRD TRODSTEM NICHT GESENDET!!!!
MAN langsam werde ich hier.....

Ka was ich jetzt machen soll.... hat vllt jemand eine Idee??
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
RebornX
JLI'ler



Anmeldedatum: 16.03.2007
Beiträge: 169

Medaillen: Keine

BeitragVerfasst am: 16.11.2007, 19:35    Titel: Antworten mit Zitat

Ok habe den Fehler grade selber gefunden:

Weil ich den Socket s in FD_CLOSE geschlossen habe und ihn danach neu erstellt habe, musste ich auch
CPP:
WSAAsyncSelect(s, hWnd, WM_SOCKET, FD_CONNECT | FD_WRITE | FD_READ | FD_CLOSE);

nochmal aufrufen^^
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Deviloper
Junior JLI'ler



Anmeldedatum: 31.05.2006
Beiträge: 77

Medaillen: Keine

BeitragVerfasst am: 17.11.2007, 13:06    Titel: Antworten mit Zitat

Hmm bei http://nopaste.com/p/aIcIu57rN
CPP:
void ZahlFehlerPrüfung(int zahl)
{
        char ttext[16];
        _itoa_s(zahl, ttext, 10);
        AddText(ttext);
}
... 1. Nicht itoa nehmen, 2. keine Umlaute in Funktionsnamen Razz 3. ist dein Buffer größer als du ihn brauchst.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Fragen, Antworten und Kritik Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2, 3  Weiter
Seite 2 von 3

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum