winsock programmierung
-
hi,
ich will einfach mal winsocks ausprobieren, aber irgendwie klappt das nicht so ganz wie ich will
die befehle hab ich alle von nem tutorialhier ist der code:
#include <stdafx.h> #include <windows.h> #include <winsock.h> #include <fstream.h> #pragma comment(lib, "wsock32.lib") int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { WSADATA wsa; ofstream debug("debug.txt"); if (!(WSAStartup(MAKEWORD(1, 1), &wsa))) //winsockinitialisierung erfolgreich? { if(debug) debug << "dllinitialisierung erfolgreich\n"; sockaddr_in addr; addr.sin_addr.s_addr = inet_addr("INADDR_ANY"); addr.sin_port = htons(1234); addr.sin_family = AF_INET; int s = socket(AF_INET, SOCK_STREAM, 0); if (s != -1) //socketinitialisierung erfolgreich? { if(debug) debug<<"socketinitialisierung erfolgreich\n"; if(bind(s, (struct sockaddr*) &addr, sizeof(addr))==-1) //socket binden erfolgreich? { if(debug) debug << "socketbinden fehlgeschlagen\n"; } if (listen(s, 1) == -1) { if(debug) debug << "listen fehlgeschlagen\n"; } } } if(debug) debug.close(); return 0; }es compiled halt und lässt sich ausführen, aber socketbinden und listen schlägt fehl

kennt ihr noch gute tutorials zu dem thema? danke!!bye freelancer
-
mfg
-
addr.sin_addr.s_addr = inet_addr("INADDR_ANY")
bin mir nicht sicher, aber müsste es nicht
addr.sin_addr.s_addr = INADDR_ANY;
heissen ?
-
-
wie mach ich das, dass sich das programm nicht gleich beendet, sondern halt auf dem port listened, bis ichs beende?
muss ich dazu son message-loop einbauen?grüsse freelancer
-
quick & dirty?
for(;;) { // Hier Dein Code... }
-
naja ich hab einfach mal ne leere winmain mit einfach
while(1)
drin laufen lassen->hat ne relativ hohe prozessornutzung...
-
Sobald Du mit accept() auf Connections wartest wird sich die CPU-Nutzung gegen 0% einpegeln...
-
hm ok das könnte funktionieren

aber irgendwie ist socklen_t nicht definiert... in winsock.h hab ich auch keinen typ gefunden der dem entsprechen könnte... woran liegts?bye
freelancer
-
Wo brauchst Du "socklen_t" ? - Nie gehört...
-
Der lezte parameter von accept() afaik
-
Also in der Platform SDK ist accept() folgendermaßen definiert:
accept(SOCKET s, sockaddr *addr, int *addrlen);Ich seh da nichts von socklen_t.
-
MarcusN schrieb:
Also in der Platform SDK ist accept() folgendermaßen definiert:
accept(SOCKET s, sockaddr *addr, int *addrlen);Ich seh da nichts von socklen_t.
unter linux:
int accept(int s, sockaddr *addr, socklen_t *addrlen);unter windows funzt auch "int" statt "SOCKET".
mfg
-
hallo,
hab den parameter jetzt überint addrlen=sizeof(len);als pointer auf den integer übergeben. besser geht wohl nicht, oder?

und zu accept: ich hab das jetzt in ner while-schleife drin, und wenn accept!=1 zurückgibt, dann schreibt er mir das in ne datei. also hab ich noch n kleinen "client" gebaut, connect() auf 127.0.0.1 macht. nur schreibt der plöde "server" nix in die datei, also scheinbar kommt nix an

grüsse freelancer
-
Falls immer noch was nicht klappen sollte etc., schau dir mal das Client - Server Chat Beispiel an auf meiner Webseite...
Kann ja nicht schaden
Gruß,
Chris
-
upsa ich depp... dumm wenn man sich die falsche output-datei anguggt

bye freelancer
-
ne frage noch: ich würde gerne einen string verwenden, um die empfangenen daten zu speichern. allerdings ist string nicht deklariert, wenn ich string.h einbinde...
byse freelancer
-
Meinst Du nicht #include <string>? oder using namespace std;? Es geht auch mit einem normalen char... hast Du dir denn das Beispiel auf meiner Seite nicht angesehen? Da werden doch eingkommende Daten zunächst in einen String gehauen...
-
dochdoch habs schon... hatte den namespace vergessen :>
bye freelancer
-
Ich hoffe du hast das include <fstream.h> auch rausgeschmissen? Es heißt nämlich <fstream> ohne .h am Ende.
Ein <fstream.h> gab es nie. Auf manchen Compilern verursacht dieser Code daher Fehler.