socketfehler 10054
-
das hatte ich schon erledigt.
mhh, wie würde das denn mit string aussehn? da sagt der doch best. i-was vonwegen konvertierung wenn ich da jetz einfach strings für einsetze?
-
string buf = "juhuhu ..."; rc = send(acceptSocket, buf.c_str(),buf.length()+1,0); ...
(auf der Empfänger-Seite kannst du leider keinen String als Ziel angeben - außer du packst dir eine passende Hilfsfunktion um recv() herum)
-
also i-was funzt hier nich..
ich habs mir nochma angesehn.. und wahrscheinlich was Übersehn..
wenn ich den server anmache, wartet der auf den client. dieser erstellt eine verbindung zum servdann passierts: der server stürzt ab... und ich hab kein haltepunkt gehabt -> keinen fehlercode..
also: beim serv is der fehlercode 10057.das müsste jetz aber weiterhelfen denk ich xD
*ich idiot*
greets
-
socket not connected..
hier mein code:
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"); }
bis dahin funzt es denk ich
er sagt auch noch "neue verb. wurde akzeptiert"..
mh aber dann fehler beim senden.. wtf?
-
poste mal den ganzen server code...
-
#include <windows.h> #include <winsock2.h> #include <cstdio> #include <cstdlib> #include <iostream> using namespace std; //Prototypen int startWinsock(void); int main() { long rc; SOCKET acceptSocket; SOCKET connectedSocket; SOCKADDR_IN addr; // Winsock starten rc=startWinsock(); if(rc!=0) { printf("Fehler: startWinsock, fehler code: %d\n",rc); return 1; } else { printf("Winsock gestartet!\n"); } // Socket erstellen 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(12345); 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 12345 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"); } //char buf [256]; //strcpy(buf, "juhuhu dateiuebertragung"); //rc=send(acceptSocket, buf, strlen(buf) + 1, 0); // strlen() + 1 für '\0' string buf = "juhuhu ..."; rc = send(acceptSocket, buf.c_str(),buf.length()+1,0); if (rc ==SOCKET_ERROR) { cout<<"Fehler beim senden."<<WSAGetLastError()<<endl; cin.get(); cin.get(); return 1; } else { cout<<"Gesendet"<<endl; } cin.get(); cin.get(); closesocket(acceptSocket); WSACleanup(); cin.get(); cin.get(); return 0; } int startWinsock(void) { WSADATA wsa; return WSAStartup(MAKEWORD(2,0),&wsa); }
da isser
-
hokage schrieb:
#include <windows.h> #include <winsock2.h> #include <cstdio> #include <cstdlib> #include <iostream> ...
da isser
Was mir als erstes auffällt ist, ist das fehlende #include <string>...
Edit:
Mit
[cpp]rc = send(connectedSocket, buf.c_str(),buf.length(),0); [/cpp]
geht es.
-
Der Fehler liegt wahrscheinlich hier:
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"); } //char buf [256]; //strcpy(buf, "juhuhu dateiuebertragung"); //rc=send(acceptSocket, buf, strlen(buf) + 1, 0); // strlen() + 1 für '\0' string buf = "juhuhu ..."; //rc = send(acceptSocket, buf.c_str(),buf.length()+1,0); rc = send(connectedSocket, buf.c_str(),buf.length()+1,0); //<- mit dem von accept() erstellten socekt die daten senden
-
leute!
ihr seid klasse!
vielen dank für die hilfe so funktionierts
greets
-
okayy, noch eine frage..
wenn ich jetz beim server sowas einfüge:
string buf;// = "meine nachricht an dich"; cout<<"NAchricht eingeben"<<endl; cin>>buf; rc = send(connectedSocket, buf.c_str(),buf.length()+1,0);
also die nachricht eingeben lasse.. dann kommt imma nur alles bis zum ersten leerzeichen an... dann nichts mehr.. woran liegt des?
greets
-
Das liegt daran, daß cin Leerzeichen als Eingabeende einstuft (und nur den Text bis zum ersten Leerzeichen in buf speichert). Wenn du die komplette Zeile einlesen willst, nimm getline().