Socket klappt nicht
-
hallo, weiß jemand warum dieser code hier
#include <windows.h> #include <fstream> #include <iostream> #include <string> #include <process.h> using namespace std; SOCKET connectSocket(SOCKET s, const char* szHostNameOrIp, int port); int getAddrFromString(const char* hostnameOrIp, SOCKADDR_IN* addr); static SOCKET s1, s2, s3; char *szAppName = "appname"; void Thread1(PVOID pvoid); // Einstiegspunkt... int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { // IP oder Hostname einlesen string string1; ifstream in("lol.xx"); if(!in) { MessageBox(0, "lol.xx nicht gefunden!", szAppName, MB_ICONERROR); return 0; } while(!in.eof()) { getline(in, string1); } // Verbinden SOCKET testsock; testsock = connectSocket(s1, string1.c_str(), geheimport); if(testsock == SOCKET_ERROR) return 0; testsock = connectSocket(s2, string1.c_str(), geheimport); if(testsock == SOCKET_ERROR) return 0; testsock = connectSocket(s3, string1.c_str(), geheimport); if(testsock == SOCKET_ERROR) return 0; _beginthread (Thread1, 0, 0); while(1) Sleep(50); return 0; } SOCKET connectSocket(SOCKET s, const char* szHostNameOrIp, int port) { WSADATA wsa; SOCKADDR_IN addr; int rc; if(WSAStartup(MAKEWORD(2, 0), &wsa) != 0) { return SOCKET_ERROR; } s = socket(AF_INET, SOCK_STREAM, 0); if(s == INVALID_SOCKET) { return SOCKET_ERROR; } memset(&addr, 0, sizeof(SOCKADDR_IN)); // zuerst alles auf 0 setzten addr.sin_family = AF_INET; addr.sin_port = htons(port); rc = getAddrFromString(szHostNameOrIp, &addr); if(rc == SOCKET_ERROR) { return SOCKET_ERROR; } if(connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR)) == SOCKET_ERROR) { return SOCKET_ERROR; } return 0; } int getAddrFromString(const char* hostnameOrIp, SOCKADDR_IN* addr) { unsigned long ip; HOSTENT* he; if(hostnameOrIp==NULL || addr==NULL) /* Parameter prüfen */ return SOCKET_ERROR; ip = inet_addr(hostnameOrIp); /* eine IP in hostnameOrIp ? */ if(ip != INADDR_NONE) /* bei einem fehler liefert inet_addr den Rückgabewert INADDR_NONE */ { addr->sin_addr.s_addr = ip; return 0; } else { he = gethostbyname(hostnameOrIp); /* Hostname in hostnameOrIp auflösen */ if(he == NULL) { return SOCKET_ERROR; } else memcpy(&(addr->sin_addr),he->h_addr_list[0],4); /*die 4 Bytes der IP von he nach addr kopieren */ } return 0; } void Thread1(PVOID pvoid) { char format[10]; char lool[100]; recv(s1, format, sizeof(format), 0); // FUnktioniert nicht sprintf(lool, "%d", WSAGetLastError()); // WSA error 10038 MessageBox(0, lool, lool, 0); _endthread () ; }Socket operation on nonsocket.
An operation was attempted on something that is not a socket. Either the socket handle parameter did not reference a valid socket, or for select, a member of an fd_set was not valid.
was heißt das jetzt genau?
Danke!
-
du müsstest schon die Addresse übergeben:
SOCKET connectSocket(SOCKET &s, const char* szHostNameOrIp, int port);
-
Melan schrieb:
du müsstest schon die Addresse übergeben:
SOCKET connectSocket(SOCKET &s, const char* szHostNameOrIp, int port);wat?lol!
@threadersteller. GetLastError(). wir gucken hier doch nicht zeile für zeile deinen müll code durch.

-
ascda schrieb:
Melan schrieb:
du müsstest schon die Addresse übergeben:
SOCKET connectSocket(SOCKET &s, const char* szHostNameOrIp, int port);wat?lol!
@threadersteller. GetLastError(). wir gucken hier doch nicht zeile für zeile deinen müll code durch.

hat er doch...

-
danke Melan! habe das & hinzugefügt und jetz funzt es

-
ascda schrieb:
wat?lol!
@threadersteller. GetLastError(). wir gucken hier doch nicht zeile für zeile deinen müll code durch.
was bist du den für ein kiddi wtf erst lesen dann denken dann schreiben und nicht erst schreiben rofl
-
ascda schrieb:
wir gucken hier doch nicht zeile für zeile deinen müll code durch.

und was fällt dir ein einfach nen code als müllcode zu bezeichenen den du nichtmal verstehst? alda falda
-
lol was isn hier los. ich gucke mir den code gar nicht erst an, wenn ihn mir jemand so für die füße klatscht und sagt: mach mal. so nicht. das mache ich nicht.

-
@ascda rofler inf.stundet
du arme Wurst