| Code Kitchen Allgemeines Coder-Forum rund um das Programmieren eigenständiger, ausführbarer Programme. |
Diskussion: C++ Server/Client - Server empfängt nichts! im Forum Code Kitchen, in der Kategorie Software Home; Anzeige Abend, Christen! Also, ich werde einfach nicht schlau, was da falsch sein könnte. server.exe Code: #include <winsock2.h> #include <iostream> ...
![]() |
| | #1 (permalink) |
| Registriert seit: 08.12.06 ![]() Likes: 0 | Anzeige Abend, Christen! Also, ich werde einfach nicht schlau, was da falsch sein könnte. server.exe Code: #include <winsock2.h>
#include <iostream>
using namespace std;
int main (int argc, char* argv[]) {
WSADATA wdData;
if (WSAStartup(MAKEWORD(2, 0), &wdData) == INVALID_SOCKET) {
cout << "Konnte Winsock nicht initialisieren!" << endl;
return 256;
}
SOCKET sckSocket;
SOCKADDR_IN addrServer;
char Request[100];
addrServer.sin_addr.s_addr = INADDR_ANY; // listen on all IPs associated with this computer
addrServer.sin_port = htons(8899); // bind to port 8899
addrServer.sin_family = AF_INET;
if ((sckSocket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
return 256;
if(bind(sckSocket, (SOCKADDR *) &addrServer, sizeof(addrServer)) == SOCKET_ERROR)
return 254;
if(listen(sckSocket, 4) == SOCKET_ERROR)
return 253;
while (true) {
SOCKET sckClient = accept(sckSocket, 0, 0);
if (sckClient != INVALID_SOCKET) {
if (recv(sckSocket, Request, sizeof(Request), 0) > 0) {
cout << Request << endl;
char test[] = "hallo zurück";
send (sckSocket, test, sizeof(test), 0);
}
}
}
system ("PAUSE");
return 0;
} Code: #include <cstdlib>
#include <iostream>
#include <winsock2.h>
using namespace std;
int main (int argc, char *argv[]) {
/* Initialisiert Winsock. */
WSADATA wdData;
WSAStartup (MAKEWORD(2, 2), &wdData);
/* Buffer bereitstellen. */
SOCKET sckSocket;
SOCKADDR_IN addrServer;
string Request = "Hallo";
char Antwort[100];
/* Socket erstellen. programm beenden, falls nicht möglich. */
if ((sckSocket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
cout << "Konnte keinen Socket erstellen!" << endl;
return 256;
}
/* Protokoll, Port und Zielserver angeben. */
addrServer.sin_family = AF_INET;
addrServer.sin_addr.s_addr = inet_addr("127.0.0.1");
addrServer.sin_port = htons(8899);
/* Socket zum Zielserver verbinden. Programm beenden, falls was schief ging. */
if (connect(sckSocket, (SOCKADDR *) &addrServer, sizeof(addrServer)) == SOCKET_ERROR) {
cout << "Konnte nicht zum Server verbinden!" << endl;
system ("PAUSE");
return 254;
}
/* Dem Zielserver ein hallo senden. Programm beenden, falls Server nicht empfangen will */
if (send(sckSocket, Request.c_str(), sizeof(Request), 0) <= 0) {
cout << "Server empfängt nichts!" << endl;
system ("PAUSE");
return 253;
}
/* Antwort ausgeben. Programm beenden, falls Server nichts schickt. */
if (recv(sckSocket, Antwort, sizeof(Antwort), 0) <= 0) {
cout << "Server antwortet nicht!" << endl;
system ("PAUSE");
return 252;
}
cout << "Request geschickt" << endl;
closesocket(sckSocket);
system ("PAUSE");
return 0;
} OK, er läuft die Unendlichschleife... Nun starte ich client.exe. Verbunden und block ein Blinker. Also nehme ich an, dass der client erfolgreich zum server verbudnen ist. Nun ist in beiden Programmen bloß ein Blinker und das war's. Sobald ich server.exe schliesse, steht in cleint.exe "Server antwortet nicht" Also nehme ich stark an, dass der Client dem Server erfolgreich hallo zugesendet hat, der server empfängt es aber entweder nicht oder antwortet nicht. Der ganze Fehler muss irgendwo hier liegen: Code: while (true) {
SOCKET sckClient = accept(sckSocket, 0, 0);
if (sckClient != INVALID_SOCKET) {
if (recv(sckSocket, Request, sizeof(Request), 0) > 0) {
cout << Request << endl;
char test[] = "hallo zurück";
send (sckSocket, test, sizeof(test), 0);
}
} nichts zurückzusenden. Kann mir jemand helfen, wie das richtig geht? danke. /* edit */ Ich habe jetzt den Code zum Bug ausgrenzen folgendermaßen umgeändert: Code: while (true) {
SOCKET sckClient = accept(sckSocket, 0, 0);
if (sckClient != INVALID_SOCKET) {
/* Bug ausgrenzen. */
cout << "hier müsste was kommen!" << endl;
if (recv(sckSocket, Request, sizeof(Request), 0) > 0) {
cout << Request << endl;
char test[] = "hallo zurück";
send (sckSocket, test, sizeof(test), 0);
}
}
} ich die client.exe starte. Der Request des Clienten kommt aber nicht rein... Müsste es wohl am recv liegen. |
| | |
| | #2 (permalink) |
| Lange her der Server Kram, aber versuch mal folgendes: ändere Code: string Request = "Hallo"; Code: char Request[] = "Hallo"; | |
| | |
| HaBOT | - Anzeige - |
| |
| | #3 (permalink) |
| Themenstarter Registriert seit: 08.12.06 ![]() Likes: 0 | hat sich rein garnichts geändert und kann mir auch nicht vorstellen, wieso es das sollte... Trotzdem danke... /* edit */ Problem gelöst, daran lag's Code: if (recv(sckSocket, Request, sizeof(Request), 0) > 0) { Code: if (recv(sckClient, Request, sizeof(Request), 0) > 0) { andere der eigene Socket im listening Modus. Danke an alle, die helfen wollten. |
| | |
| | #4 (permalink) |
| hallo jesus, könntest du mir mal den source von deiner server.exe und dem client.exe posten?? also jetzt wo keine fehler mehr drin sind? ich hab auch schon mit sockets rumprobiert aber ich krieg da einfach nichts hin was funzt . ich benutze dev c++. muss ich noch irgend was einstellen oder kann ich den source einfach so compilieren?edit: wenn ich das so compiliere kommen immer ganz viele " Linker error" mfg, 0ImZ | |
| | |
| | #5 (permalink) |
| Themenstarter Registriert seit: 08.12.06 ![]() Likes: 0 | Ich benutze auch den Dev-C++. Du musst die winsock schon linken! Projekt -> Prokettoptionen -> Parameter -> Bibliothek/Objekt hinzufügen. |
| | |
| | #6 (permalink) |
| ok, dass habe ich jetzt hinbekommen ![]() noch ne frage: welche variable enthält den wert, der vom clienten kommt? ist das Request[100] ?? wenn ich ne if abfrage mache z.b. if(Request[100]==3) {cout.....} kommt wenn der client 3 sendet nicht das was ich will! wie kann ich den emfangenen wert weiternutzen? und noch was: wenn ich z.b. "hallo" sende wird hallo nicht ganz dargestellt. da kommt dann immer nur "hall... und dann so komische zeichen" und noch was: der server antwortet iwie nicht also das "hallo zurück". thx 4 help schonmal | |
| | |
| | #7 (permalink) | ||
| Themenstarter Registriert seit: 08.12.06 ![]() Likes: 0 | OMG nein!!! In Request speichere ich, was dem Server geschcikt werden soll. Zitat:
Zitat:
Versuch's mal mit Port 80, sowohl listen vom Server als auch vom Clienten. /* edit */ Jetzt musst ich 3mal editieren, weil ich QUOTE falsch geschrieben habe. Könnter den QUOTE-Button nicht umbauen, dass kein Prompt für den zu zitierenden Text mehr kommt und einfach um das Markierte herum QUOTE und /QUOTE steht? Versucht's mal mit RegExp. Hackerboard lol | ||
| | |
| | #8 (permalink) |
| Registriert seit: 24.01.07 ![]() Likes: 0 | Vorweg: Ich progge mit 0lmz zusammen... Wir wollen den Server anhand der empfangenen Nachricht best. Funktionen ausführen lassen, das wollten wir mit ner IF-Abfrage realisieren, aber wenn wir Code: if(Request[100]==3){cout...} Wir haben versucht, den Bereich einzugrenzen, aber da kamen ganz komische Werte raus... Unser Source soll dann ungefähr so aussehen: ... [der ganze socket-dreck] request wird definiert request wird ausgegeben if request=== 3 bool blabla else if request==4 bool blabla ... Anschließend muss ich noch sagen, dass wir beide nicht besondere Pros sind ^^ |
| | |
| | #9 (permalink) | |
| Zitat:
Code: #include <cstring>
if( strcmp(Request,"3") == 0 ) { ... } | ||
| | |
| | #11 (permalink) | |||
| Themenstarter Registriert seit: 08.12.06 ![]() Likes: 0 | Zitat:
LOL, if's werden überall benötigt für alles, ohne if geht rein garnichts. Zitat:
Request[100] der Variablename ist. Request ist der Variablename, die [100] ist der Blockoperator dahinter, die die Variable zunem Array für 100 dieses Datentypes sind. Jeder Array-Eintarg ist ein Buchstabe, so funktionieren die strings in C++ (Das string-Objekt mal ausgenommen) Zitat:
| |||
| | |
| | #12 (permalink) |
| jo^^ sind halt noch noobs^^ aber jetzt funzt das ja ![]() 2 sachen noch: warum kann der server nicht antworten? an ner firewall etc kanns nicht liegen. und warum kann die nachricht die dem server geschickt wird nicht länger als 4 zeichen sein? wenn es mehr sind, dann kommt so en bug. mfg, 0ImZ | |
| | |
| | #13 (permalink) |
| Themenstarter Registriert seit: 08.12.06 ![]() Likes: 0 | Der Server verarbeitet den Request in meinem beispiel doch übrhaupt nicht. Er schcikt bloß was zurück, wenn er was empfängt, ganz egal was. Weiß bei deinem problem also nicht weiter. |
| | |
| | #14 (permalink) |
| mmh ok. wie könnte ich es denn machen, dass der server regelmäßig anfragen an meine ip schickt wenn er an ist? wenn ich so wie das script jetzt ist zum server connecten will muss ja der port weitergeleitet werden und das ist ja blöd... also ich möchte den server so, dass er ne verbindung zum clienten herstellt und dann auf anweisungen wartet. (sonst muss ja jeder [es soll mal ein chatprog werden] einstellungen am router machen und das ist ja blöd) mfg, 0ImZ | |
| | |
| | #15 (permalink) | |
| Moderator ![]() Registriert seit: 30.09.06 ![]() ![]() ![]() ![]() ![]() ![]() Likes: 441 | Zitat:
__________________ Mein Blog - Mein Job - Diaspora Der Ring uns zu knechten besteht aus 12 Sternen auf blauem Grund. Neue Beiträge im Habo via Twitter - Das HaBo auf FB - Das HaBo bei G+ | |
| | |
![]() |
| - Anzeige - | |
| |
| Themen-Optionen | |
| Ansicht | |
| |
Ähnliche Themen | ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| win ce 5.0 Server,Client | Metathron | Code Kitchen | 0 | 11.11.09 08:48 |
| VPN Client Server Lösungen | mauralix | Network · LAN, WAN, Firewalls | 6 | 29.12.06 02:08 |
| c++ client-server verbindung | redips | Applikationen | 11 | 19.12.05 16:28 |
| ein IRC Client & 2 Server?? | Watchme | Internet Allgemein | 1 | 24.08.02 11:10 |
| Client/Server Projekt | Armitage | Code Kitchen | 7 | 17.03.02 19:10 |