Problem bei Server - Client Verbindung beim Senden
-
Hi,
Verbindung herstellen etc. funktioniert alles, aber beim senden bzw. empfangen kommt immer nur die Anzahl der Zeichen die gesendet bzw. empfangen werden, also in dem Fall 256 und nicht der Text, der gesendet werden sollte:Client
//--------------------------------------------------------------------------- #include <windows.h> #include <winsock2.h> #include <vcl.h> #pragma hdrstop #include <iostream.h> #pragma argsused //Prototypen int startWinsock(void); int main() { long rc; SOCKET s; SOCKADDR_IN addr; char buf[257]; // Anzahl Zeichen, die gesendet werden char conIP[15] = "10.17.126.4"; // Ziel-IP Adresse int conPort = 54321; // Verwendeter Port memset(&addr,0,sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzen addr.sin_family=AF_INET; addr.sin_port=htons(conPort); // htons() = Konvertierung für Netzwerk addr.sin_addr.s_addr=inet_addr(conIP); rc=startWinsock(); if(rc!=0) { cout << "Fehler: startWinsock, Fehlercode: " << rc << "\n"; return 1; } else { cout << "Winsock gestartet!\n"; } s=socket(AF_INET,SOCK_STREAM,0); if(s==INVALID_SOCKET) { cout << "Fehler: Der Socket konnte nicht erstellt werden, Fehlercode: " << WSAGetLastError() << "\n"; return 1; } else { cout << "Socket erstellt!\n"; } rc=connect(s,(SOCKADDR*)&addr,sizeof(SOCKADDR)); if(rc==SOCKET_ERROR) { cout << "Fehler: konnte nicht verbunden werden, Fehlercode: " << WSAGetLastError() << "\n"; } else { cout << "Verbunden mit " << conIP << "\n"; // strcpy(buf,"Hallo wie gehts?"); while (rc != SOCKET_ERROR) { cin >> buf; send(s,buf,256,NULL); rc = recv(s,buf,256,NULL); cout << rc << "\n"; } } getchar(); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }
Server:
#include <stdio.h> #include <windows.h> #include <winsock.h> #include <vcl.h> #pragma hdrstop #include <iostream.h> #pragma argsused //Prototypen int startWinsock(void); int main() { long rc; SOCKET acceptSocket; SOCKET connectedSocket; SOCKADDR_IN addr; char buf[256]; // Nachricht zum Versenden int conPort = 54321; // Port memset(&addr,0,sizeof(SOCKADDR_IN)); addr.sin_family=AF_INET; addr.sin_port=htons(conPort); addr.sin_addr.s_addr=INADDR_ANY; 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"); } rc=bind(acceptSocket,(SOCKADDR*)&addr,sizeof(SOCKADDR_IN)); if(rc==SOCKET_ERROR) { printf("Fehler: bind, fehler code: %d\n",WSAGetLastError()); return 1; } else { cout << "Socket an Port " << conPort << " gebunden\n"; } rc=listen(acceptSocket,10); 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 != SOCKET_ERROR) { rc=recv(connectedSocket,buf,256,NULL); cout << rc << "\n"; cin >> buf; send(connectedSocket,buf,256,NULL); } getchar(); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }
-
Du übergibst auch immer 256 an send und nicht die Anzahl Zeichen die gesendet werden sollen
-
hat nichts mit standart c++ zu tun.
leute, ist das mit den unterforen so schwer?...sowas gehört ins winapi forum
-
rc=recv(connectedSocket,buf,256,NULL); cout << rc << "\n";
Du schreibst damit nur die Anzahl der empfangenen Zeichen in die Console.
Es müsste heissen :rc=recv(connectedSocket,buf,256,NULL); cout << buf << "\n";
-
ach so, jetzt versteh ichs, ist eigentlich logisch
wegen den unterforen: sorry, ich finds echt ein bisschen kompliziert
-
Dieser Thread wurde von Moderator/in HumeSikkins aus dem Forum C++ in das Forum WinAPI verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.