winsock2 ...
-
Hallo Leute,
Zunächst bin ich mir nicht sicher ob das das richtige Forum ist.
Falls nicht bitte verschieben :pAlso zu meinem Problem. Ich habe einen Server und einen Clienten geschrieben -> zum Test zunächst alles auf localhost und port 80.
Der Server wartet wie gewünscht ... nur der Client bricht sofort nach seinem Start wieder ab ... ohne Meldung :o Ich hab keine Ahnung weshalb ...Der Server:
#include <iostream> #include <windows.h> #include <winsock2.h> #include <stdio.h> using namespace std; int startWinsock(void); long rc=1; int main() { long rc=1; char buf[256]; SOCKET acceptSocket; SOCKET connectedSocket; SOCKADDR_IN addr; rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } acceptSocket=socket(AF_INET,SOCK_STREAM,0); if(acceptSocket==INVALID_SOCKET) { printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket erstellt!\n"); } memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(80); addr.sin_addr.s_addr=ADDR_ANY; rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); if(rc==SOCKET_ERROR) { printf("Fehler: bind, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket an port 80 gebunden\n"); } rc=listen(acceptSocket,1); if(rc==SOCKET_ERROR) { printf("Fehler: listen, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("acceptSocket ist im listen Modus....\n"); } connectedSocket=accept(acceptSocket,NULL,NULL); if(connectedSocket==INVALID_SOCKET) { printf("Fehler: accept, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Neue Verbindung wurde akzeptiert!\n"); } while(rc!=0) { rc=recv(connectedSocket,buf,6,0); if(rc=!SOCKET_ERROR) { buf[rc]='\0'; printf(buf); } else printf("Error while receiving data ..\n"); } return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }Der Client:
#include <iostream> #include <windows.h> #include <winsock2.h> #include <stdio.h> using namespace std; int startWinsock() { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); } int main() { char buf[6]; long rc; SOCKET s; SOCKADDR_IN addr; rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); return 0; } s=socket(AF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) { printf("Fehler: Der Socket konnte nicht erstellt werden, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Socket erstellt!\n"); return 0; } memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(80); addr.sin_addr.s_addr=inet_addr("127.0.0.1"); rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(rc==SOCKET_ERROR) { printf("Fehler: connect gescheitert, fehler code: %d\n",WSAGetLastError()); return 1; } else { printf("Verbunden mit 127.0.0.1..\n"); return 0; } strcpy(buf,"Success"); send(s,buf,6,0); system("pause"); return 0; }Danke im Vorraus für Antworten

Mfg Sam
-
wieso is buf nur 6 bytes groß rofl.
-
müssten 7 sein ja ... Was macht das? Er connected ja nichma ...
Also das ist sicherlich nicht das prob.
-
nö 8 und wenn du meinst dass das kein ernsthaftes problem sei freu ich mich schon auf deinen fertigen server. sag mir die IP wenns soweit ist. und zum thema: was gibt printf denn aus man, zeig doch ma eigeninitiative, so komplex ist der code da nun echt ned als dass du den ned kurz print debuggen könntest
-
Ich glaub Port 80 darfst du nicht benutzen... das ist der https-Port - bin mir aber nicht sicher, hab hier irgendwas mal darüber gelesen...ned bös sein x)
Lg Mentras
-
ne der http port aber stimmt du hast recht. ports unter 1024 sind reserviert
-
erstens : funktioniert Port 80 solange kein Programm ihn verwendet ..
zweitens : hab ich auch schon weitaus höhere ports verwendet ... mit demselben ergebnis.
drittens: Kann Ich Dir kaum sagen was print ausgibt Wenn der client direkt nach start wieder beendet wird ...
und viertens: Warum bitte 8? :o Für mich sind Success 7 Zeichen.
Und wenn der server statt Success -> Succes ausgibt ... ist das für Mich kein ernsthaftes Problem ... :oMfg Sam
-
Mhm, ich habe Deinen Quelltext 1 zu 1 übernommen, kompiliert und die exe ausgeführt. Der Client gibt einwandfrei aus:
Winsock gestartet!
und beendet sich dann ...
Ich habe keinen Server laufen.
Sieht also gut aus!
-
Ich hab mit Sleep()-Cmds jetzt festgemacht worans liegt ... Und der Client startet bei Mir Winsock definitiv nicht (Ohne Error-Message)... Der Server
aber schon ..?!Das ganze sieht jetzt so aus:
#include <iostream> #include <windows.h> #include <winsock2.h> #include <stdio.h> using namespace std; int startWinsock() { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); } int main() { char buf[6]; long rc; SOCKET s; SOCKADDR_IN addr; printf("starting winsock soon"); Sleep(10000); rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); return 0; } printf("winsock started"); Sleep(10000);Direkt nach "Starting winsock soon" und dem Sleep verreckt er .. Ohne weitere Meldung...
Woran kann das liegen??
-
Lone schrieb:
und viertens: Warum bitte 8? :o Für mich sind Success 7 Zeichen.
Und wenn der server statt Success -> Succes ausgibt ... ist das für Mich kein ernsthaftes Problem ... :orofl
-
Hat sich erledigt .... 'return 0' Nur am Programmende :p.
Danke an Alle!
-
Und zu den ganzen Leuten Die wohl besonders viel Wert darauf legen Anonym sinnlose Kommentare wie "ROFL" von sich zu geben -> Get a RL.
-
lern erstmal sepples bevor du mit irgendwelchen netzwerk lamereien anfängst, du pufferüberläufer.
-
Ich schreibe seit 2 Tagen in C++ ... Ich hab sowas vorher in Perl gemacht ...
Wenn man kA hat einfach fresse halten, ok?
Du musst Mir nicht erzählen was Ich lernen soll .. Das such Ich Mir ganz alleine aus danke ;).
Da dus nichma schaffst in dem Code den Fehler zu sehen und nichts als unnütze Kommentare abgibst zeigt Wie profi der Arrogante Egozentriker wirlklich ist was?
Du brauchst Dir nicht Die Mühe machen zu Antworten ... Ich besuche dieses Forum sicher nichmehr. Kannst derweil ma überlegen WER der Noob ist Oo.
-
Lone schrieb:
Da dus nichma schaffst in dem Code den Fehler zu sehen
Mhm, naja, Du hast offensichtlich Deinen Client nicht aus der Konsole heraus gestartet, sonst hättest Du von Anfang an alle printf - Ausgaben gesehen.
Wenn Du natürlich einfach nur auf die Datei doppelklickst, dann schließt sich das Konsolenfenster nach Programmende sofort wieder, das ist der Grund, warum Du nicht bemerkt hast, daß Winsock sehr wohl gestartet wird.
Daß das Programm danach wegen der return - Anweisung beendet wird, ist völlig klar, aber Du hast behauptet, es würde gar keine Ausgabe erzeugt --> das war eine falsche Information, die es nicht leicht gemacht hat, herauszufinden, daß Dein Start Winsock ja doch funktioniert.
-
Ich habe um eine Lösung gebeten nicht um Dumme Leute Die Mich zuflamen und dumme Kommentare abgeben ... Da hier nur das zweitere der Fall war ... C-Ya ...
sowas hab Ich nicht nötig. Hättet Mir ja direkt eine solche Antwort geben können ... Nein das musste Ich selbst machen ... bei euch kommen nur ROFL's raus.
Also erzähl nich son schwachfug und überleg wozu so ein Forum gut ist.
Dieses hier hat auf jedenfall seinen Zweck verfehlt -> C-Ya
-
Der ging nich an Dich ... Aber Aufgrund dieser Anonym-Poster weiß Ich nich mit wem Ichs zutun hab .. sry

-
Ich fühl mich auch nicht angesprochen.
Aber ein Tip für die Zukunft:
Starte Konsolenprogramme aus der Konsole, dann verpasst Du auch die Ausgaben nicht. Höchstwahrscheinlich hättest Du in dem Fall selbst schnell gemerkt, daß die return - Anweisung Dein Programm beendet, mit Sicherheit hättest Du aber gesehen, daß vorher noch Winsock gestartet wird.
-
Lone denkst du, uns würde es in irgendeiner Form interessieren ob du dieses Forum besuchst oder nicht?

Leute die nicht mal wissen, dass jeder string wie "Success" noch ein abschließendes 0 Zeichen hat, brauchen wir sowieso nicht
pwned
-
ha ha ha schrieb:
Leute die nicht mal wissen, dass jeder string wie "Success" noch ein abschließendes 0 Zeichen hat, brauchen wir sowieso nicht
Bist Du schon mal auf den Gedanken gekommen, daß der Sinn dieses Forums darin besteht, Leuten zu helfen, die NICHT alles wissen?