JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

WinSocks beim start starten...
Gehe zu Seite 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: 12.11.2007, 13:50    Titel: WinSocks beim start starten... Antworten mit Zitat

Hi,

ehm ich bastel grade an sonem "Multi-Chat" in WinApi mit WinSocks und stoße schon auf erste Hürden^^ rofl...

http://www.imagespell.com/show.php?id=2e4fe38a1f55eef12ce6423db95c17fc.jpg

Doch wie mache ich es, dass die WinSocks beim start (nachdem das Fenster erstellt würde) ausgeführt werden?? Also von WSAStartup bis accept() ??
In dem Screen^^ habe ich es von WSAStartup bis zum listenModus geschafft^^, weil ich die Funktionen in der WM_CREATE Message ausgeführt habe.
Aber sobald ich accept() auch noch in die WM_CrATE Message packe öffnet sich nichtmal das Fenster ^^ -.-

Habt ihr da eine idee??
_________________
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: 12.11.2007, 14:02    Titel: Antworten mit Zitat

accept ist ein plockierender befehl das heist er wartet da bis es ein socket gibt zum aktzeptieren auf teufel komm raus hundert jahre.

du must um das acept wie all die anahme und senden befehle selects drumerrum bauen um diese blockierende befehle nur zu nutzen wenn man sie brauch.

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: 12.11.2007, 14:19    Titel: Antworten mit Zitat

Faller hat Folgendes geschrieben:
accept ist ein plockierender befehl das heist er wartet da bis es ein socket gibt zum aktzeptieren auf teufel komm raus hundert jahre.

du must um das acept wie all die anahme und senden befehle selects drumerrum bauen um diese blockierende befehle nur zu nutzen wenn man sie brauch.

mfg Faller


Heißt das jetzt, dass ich eine zweite Callback funktion dafür schreiben muss??
Also accept ist denk ich eine Funktion die ich die ganze zeit brauche, weil das ListView Control dadrüber soll ja eine Server Liste darstellen^^, wo dann die Server aufgelistet werden, wenn sie zu mir connecten...
Dh. der Client muss durchgehend prüfen ob ein Server zu mir connecten will^^ oda liege ich da etwa falsch??
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.11.2007, 14:41    Titel: Antworten mit Zitat

Es gibt eine Funktion mit der du testen kannst, ob ein Socket etwas neues hat. Daher du kannst vor dem Aufruf von accept testen, ob schon was da ist, er also sofort zurückkehren würde, oder ob nichts da ist, accpt also auf unbestimmte Zeit wartet.
_________________
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: 12.11.2007, 14:45    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
Es gibt eine Funktion mit der du testen kannst, ob ein Socket etwas neues hat. Daher du kannst vor dem Aufruf von accept testen, ob schon was da ist, er also sofort zurückkehren würde, oder ob nichts da ist, accpt also auf unbestimmte Zeit wartet.


hmm, kennt jemand die Funktion??
_________________
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: 12.11.2007, 14:51    Titel: Antworten mit Zitat

RebornX hat Folgendes geschrieben:
Jonathan_Klein hat Folgendes geschrieben:
Es gibt eine Funktion mit der du testen kannst, ob ein Socket etwas neues hat. Daher du kannst vor dem Aufruf von accept testen, ob schon was da ist, er also sofort zurückkehren würde, oder ob nichts da ist, accpt also auf unbestimmte Zeit wartet.


hmm, kennt jemand die Funktion??


CPP:
select()


Allerdings solltest du dein Programm wahrscheinlich ganz anders aufbauen. Weil nie ganze Zeit einfach immer wieder abzufragen, ob etwas neues auf dem Socket passiert ist, ist sehr schlechter Stil.
_________________
»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
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.11.2007, 14:56    Titel: Antworten mit Zitat

Wenn du noch nie was von select() gehört hast, solltest du dich evtl. vorher nochmal ein wenig schlauer machen.
Ein Anfang:
http://zotteljedi.de/
und besonders zu select: http://zotteljedi.de/doc/socket-tipps/select_ganz_genau.html
_________________
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: 12.11.2007, 15:00    Titel: Antworten mit Zitat

PeaceKiller hat Folgendes geschrieben:

Allerdings solltest du dein Programm wahrscheinlich ganz anders aufbauen. Weil nie ganze Zeit einfach immer wieder abzufragen, ob etwas neues auf dem Socket passiert ist, ist sehr schlechter Stil.


wie meinst du das? Soll ich nur im 5 Minuten takt abfragen oder wie ?
Weil das wäre ja wiederrum nicht so toll für ein chat^^ Dann muss man immer 5 min warten bis man eine verbindung hat...


edit://
Jonathan_Klein hat Folgendes geschrieben:
Wenn du noch nie was von select() gehört hast, solltest du dich evtl. vorher nochmal ein wenig schlauer machen.
Ein Anfang:
http://zotteljedi.de/
und besonders zu select: http://zotteljedi.de/doc/socket-tipps/select_ganz_genau.html

Doch ^^ ich habe dieses c-worker tutorial mal durchgenommen^^ ich lese mir diese^^ tutorials auch nochmal durch^^ .... Die scheinen etwas aktueller zu sein...
_________________
Besucht meine Seite:
www.cpparchiv.dl.am


Zuletzt bearbeitet von RebornX am 12.11.2007, 15:03, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 12.11.2007, 15:01    Titel: Antworten mit Zitat

Ich habs damals glaub ich mal über Timer gemacht. Jede Sekunde abgefragt. Da verbindet man trotzdem sehr schnell und ist net die ganze Zeit am nachgucken.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
PeaceKiller
JLI Master


Alter: 35
Anmeldedatum: 28.11.2002
Beiträge: 970

Medaillen: Keine

BeitragVerfasst am: 12.11.2007, 15:45    Titel: Antworten mit Zitat

select() blockiert ja bis etwas auf deinem Socket passiert. Das Problem ist, dass du in der Zeit nicht auf Windows-Nachrichten reagieren kannst.

Das Thema ist nicht ganz einfach gescheit zu lösen. Vielleicht hilft dir:

http://tangentsoft.net/wskfaq/articles/io-strategies.html

Oder I/O Completion Ports:
http://www.microsoft.com/technet/sysinternals/information/IoCompletionPorts.mspx

Mit der WaitForMultipleObjects-API solltest du auch auf Windows- und Netzwerknachrichten gleichzeitig warten können.
_________________
»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: 13.11.2007, 18:23    Titel: Antworten mit Zitat

Sooo

ich habe jetzt ein bischen (was heißt ein bisschen ... SEHR VIEL) rumrecherchiert:

Also select() ist zwar gut^^ aba WSAAsyncSelect() ist besser xD
Zumindest für WinApi Anwendungen^^ (hab ich i-wo gelesen^^)

Jedoch habe ich nicht so richtig verstanden was WSAAsyncSelect eigentlich macht???

Zitat:
The Windows Sockets WSAAsyncSelect function requests Windows message-based notification of network events for a socket.


Heißt das jetzt, dass die Funktion WSAAsyncSelect WinSocks erlaubt wie Windows-Messages (zB. WM_PAINT, WM_COMMAND usw..) auf Verbindungen von außen zu reagieren???

Wie ich mir das Vorstelle:

Ein Server besitzt einen Socket: "AcceptSocket"
"AcceptSocket" ist an einen Port gebunden und im Listen-Modus...
Dann wird "AcceptSocket" in WSAAsyncSelect() reingepackt:
CPP:
WSAAsyncSelect(AcceptSocket, hWnd, WM_SOCKET, FD_ACCEPT | FD_WRITE | FD_READ | FD_CLOSE);


Sobald dann ein Client versucht auf den server zu connecten o.ä, sendet Windows die passende Message: FD_READ, FD_CLOSE, FD_CONNECT usw^^

Ich weiß jetzt nicht was die message auf: "Eingehende verbindung von Außen" ist, deswegen sag ich jetzt einfach mal das ist die "FD_CONNECT" Message^^ Wenn dann halt sone message ankommt kann man in "FD_CONNECT" die accept() Funktion einmal (!) ausführen, sodass nixx blockiert wird^^
Dann gibt accept einen socket zurück usw....
So in der Art läuft das auch mit den aderen Blocking Calls recv(), send() usw...

Ist das so richtig??
Oda bin ich auf dem völlig falschen pfad???
_________________
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: 14.11.2007, 16:37    Titel: Antworten mit Zitat

Nagut diese frage da hat sich geklärt^^

habe jetzt aber eine andere:
Wie kann ich mit connect() in regelmäßigen zeitabständen prüfen ob der server da ist, ohne zu blockieren?
Ich habe es mit einer Schleife und sleep probiert, doch da wird logischer Weise bockiert -.-

Kennt jemand eine bessere Lösung??
_________________
Besucht meine Seite:
www.cpparchiv.dl.am
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 14.11.2007, 16:41    Titel: Antworten mit Zitat

aber du weißt mittlerweile schon wofür select da ist???
_________________
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: 14.11.2007, 16:44    Titel: Antworten mit Zitat

Jonathan_Klein hat Folgendes geschrieben:
aber du weißt mittlerweile schon wofür select da ist???


ja ^^ also fast ^^.... der ehm naja... ich kann es nicht erklären^^
_________________
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, 16:46    Titel: Antworten mit Zitat

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).

_________________
»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
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 1, 2, 3  Weiter
Seite 1 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