Hallo Leute :D
Also ich fange gerade an ein wenig mit Sockets herumzuexperimentieren etc. und eins, zwei Programme zu schreiben.Nun wollte ich zuerst einmal fragen ob der Code so richtig erscheint und womit ich mein Programm sozuagen ,,Testen" kann.
Also hier der Code:
Das Problem:
Ich verstehe den Code nicht 100% besonders an einer Stelle habe ich Probleme.
Hier der Codeabschnitt meines Problemes ;D:
Probleme:
1.Die Schleife:
-ist es gut jede paar millisekunden zu überprüfen, ob jemand aus der Warteliste akzeptiert wird?
-frisst die Schleife nicht sehr viel Rechenleistung (im Verhältnis)
-könnte ich dieses Problem vllt. durch eine Sleep(zeit in millisekunden) Funktion (Windows.h) beheben, indem er nur alle 30 sekunden checkt
2. Der code an sich:
-
-Warum überprüft man ob einer Connected indem man die zweite Socket variablen "missbraucht" ?
-Könnte man nicht if(accept(virent,(SOCKADDR*)&addr,%addrlength)!=-1) schreiben?
3. Es funktioniert nicht:
-ich habe diesen Code aus einem Tutorial ein wenig "geklaut" aber er funktioniert nicht (im Tutorial schon) (siehe nächste Punkte was gemeint)
-Es gibt keine compilierfehler etc.
-ich weiß nicht genau ob man mit der ping Funktion von cmd den Server "Testen" kann...
-windows7->kein telnet
-wie kann ich es austesten ohne telnet?
-Programm "funktioniert" nur wenn ich via ping Funktion testen möchte gibt es zeitüberschreitung (Pakete verloren 100%)
So das sind meine Probleme ich hoffe ihr könnt mir helfen es kann natürlich auch sein das etwas anderes im Code nicht stimmt.
Mfg Simon
P.S.: Folgende gehen auch nicht:
if(virhos=accept(...)) //dauernde ausgabe Cleint found was nur logisch ist ;D
if(accept(...)!=-1)
if(virhos==accept(...))
P.S2:Rechtschreibfehler schenke ich euch (schnell geschrieben)!!!
Also ich fange gerade an ein wenig mit Sockets herumzuexperimentieren etc. und eins, zwei Programme zu schreiben.Nun wollte ich zuerst einmal fragen ob der Code so richtig erscheint und womit ich mein Programm sozuagen ,,Testen" kann.
Also hier der Code:
PHP Code:
/*
Ws2_32.lib per Optionen des Projektes gelinkt...
Ich könnte auf via #pragma comment(lib,Ws2_32.lib) linken
***später vielleicht verändern***
*/
#include "stdafx.h" //include<iostream>, include<WinSock2.h>,
//------------------------Pause Befehl-----------------------
void sleep(){
int sl;
std::cout<<"Zum Fortfahren eine beliebige Taste eingeben und mit Enter bestaetigen!!!"<<std::endl;
std::cin>>sl;
}
//----------------------------------Main-Funktion--------------------------------------
void main(){
//--------------------------------WSAStartup------------------------------
WSADATA wsaData;
WSAStartup(MAKEWORD(1,1),&wsaData);
//-------------------------------Sockets ----------------------------
SOCKET virhos;
virhos = socket(AF_INET,SOCK_STREAM,0);
SOCKET virent;
virent = socket(AF_INET,SOCK_STREAM,0);
// ----------------------------Überprüfung der ERstellung------------------
if(virent!=-1&&virhos!=-1){
std::cout<<"Sockets erfolgreich erstellt!!!"<<std::endl;
}//if sockets
//---------------------------Adresse-------------------------------
struct sockaddr_in addr;
addr.sin_family= AF_INET;
addr.sin_addr.s_addr= inet_addr("143.232.7.16");
addr.sin_port= htons(7456);
//-------------------------------virent binden (später listen)------------------------
bind(virent,(SOCKADDR*)&addr,(sizeof(&addr)));
//--------------------------------bind kontrolle---------------------------
if(bind(virent,(SOCKADDR*)&addr,(sizeof(&addr))!=-1)){
std::cout<<"Socket erfolgreich gebunden!!!"<<std::endl;
}//if bind
//-------------------------addresslenge für addrlen(Parameter)------------------------
int addrlength= (sizeof(&addr));
//--------------------------listen (virent, bis einer connectet) .--------------------------
listen(virent,SOMAXCONN);
//--------------------------Endlosschleife zum warten auf accept()--------------------
for(;;){
if((virhos=accept(virent,(SOCKADDR*)&addr,&addrlength))!=-1){
std::cout<<"Client found"<<std::endl;
}//if in for
} //for
sleep(); // pause befehl
}//main
Ich verstehe den Code nicht 100% besonders an einer Stelle habe ich Probleme.
Hier der Codeabschnitt meines Problemes ;D:
PHP Code:
for(;;){
if((virhos=accept(virent,(SOCKADDR*)&addr,&addrlength))!=-1){
std::cout<<"Client found"<<std::endl;
}//if in for
} //for
1.Die Schleife:
-ist es gut jede paar millisekunden zu überprüfen, ob jemand aus der Warteliste akzeptiert wird?
-frisst die Schleife nicht sehr viel Rechenleistung (im Verhältnis)
-könnte ich dieses Problem vllt. durch eine Sleep(zeit in millisekunden) Funktion (Windows.h) beheben, indem er nur alle 30 sekunden checkt
2. Der code an sich:
-
PHP Code:
if((virhos=accept(virent,(SOCKADDR*)&addr,&addrlength))!=-1)
-Könnte man nicht if(accept(virent,(SOCKADDR*)&addr,%addrlength)!=-1) schreiben?
3. Es funktioniert nicht:
-ich habe diesen Code aus einem Tutorial ein wenig "geklaut" aber er funktioniert nicht (im Tutorial schon) (siehe nächste Punkte was gemeint)
-Es gibt keine compilierfehler etc.
-ich weiß nicht genau ob man mit der ping Funktion von cmd den Server "Testen" kann...
-windows7->kein telnet
-wie kann ich es austesten ohne telnet?
-Programm "funktioniert" nur wenn ich via ping Funktion testen möchte gibt es zeitüberschreitung (Pakete verloren 100%)
So das sind meine Probleme ich hoffe ihr könnt mir helfen es kann natürlich auch sein das etwas anderes im Code nicht stimmt.
Mfg Simon
P.S.: Folgende gehen auch nicht:
if(virhos=accept(...)) //dauernde ausgabe Cleint found was nur logisch ist ;D
if(accept(...)!=-1)
if(virhos==accept(...))
P.S2:Rechtschreibfehler schenke ich euch (schnell geschrieben)!!!