Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
RebornX JLI'ler

Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 14.11.2007, 18:01 Titel: |
|
|
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 |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 14.11.2007, 20:57 Titel: |
|
|
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 |
|
 |
RebornX JLI'ler

Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 14.11.2007, 21:28 Titel: |
|
|
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 |
|
 |
Faller Junior JLI'ler
Alter: 37 Anmeldedatum: 30.11.2006 Beiträge: 88 Wohnort: Dresden Medaillen: Keine
|
Verfasst am: 15.11.2007, 10:17 Titel: |
|
|
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 |
|
 |
RebornX JLI'ler

Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 15.11.2007, 19:41 Titel: |
|
|
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
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 15.11.2007, 20:15 Titel: |
|
|
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 |
|
 |
RebornX JLI'ler

Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 15.11.2007, 20:25 Titel: |
|
|
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
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 15.11.2007, 21:14 Titel: |
|
|
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 |
|
 |
RebornX JLI'ler

Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 15.11.2007, 21:25 Titel: |
|
|
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 |
|
 |
Jonathan_Klein Living Legend

Alter: 37 Anmeldedatum: 17.02.2003 Beiträge: 3433 Wohnort: Siegerland Medaillen: Keine
|
Verfasst am: 16.11.2007, 15:34 Titel: |
|
|
spricht ja nu nix dagegen, sich selbst ein paar Vereinfachungen zu tippen. _________________ https://jonathank.de/games/ |
|
Nach oben |
|
 |
RebornX JLI'ler

Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 16.11.2007, 17:09 Titel: |
|
|
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 |
|
 |
PeaceKiller JLI Master

Alter: 36 Anmeldedatum: 28.11.2002 Beiträge: 970
Medaillen: Keine
|
Verfasst am: 16.11.2007, 17:20 Titel: |
|
|
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 |
|
 |
RebornX JLI'ler

Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 16.11.2007, 17:55 Titel: |
|
|
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 |
|
 |
RebornX JLI'ler

Anmeldedatum: 16.03.2007 Beiträge: 169
Medaillen: Keine
|
Verfasst am: 16.11.2007, 19:35 Titel: |
|
|
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 |
|
 |
Deviloper Junior JLI'ler
Anmeldedatum: 31.05.2006 Beiträge: 77
Medaillen: Keine
|
Verfasst am: 17.11.2007, 13:06 Titel: |
|
|
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 3. ist dein Buffer größer als du ihn brauchst. |
|
Nach oben |
|
 |
|