Client <-> Server (send <-> recv) SOCKET
-
Hallo..
ist das so Richtig ?
Senden
//..... else { printf("Verbindung zu localhost!\n"); strcpy(buf,"Hallo Anna!!!"); rc=send(s,buf,13,0); }Empfangen
//..... else { printf("Eine Verbindung steht!\n"); rc=recv(acceptSocket,buf,256,0); printf("::%s\n",buf); }Aber bei mir kommt irgendwie nix an

-
rückgabewerte und errorcodes ( WSAGetLastError() und/oder GetLastError() ) sind deine freunde.

sind die sockets gültig?
versuche deinen fehler etwas einzugrenzen.
-
jow miller_m, war nen SOCKET falsch.. nun geht es sauber
danke
-
moin,
ich habe selbst nen problem mit den sockets:
ich hole mir von einer i-seite meine derzeitige RechnerIP im netz.
wenn ich jetzt mit connect arbeite, schtellt er zwar ne verbindung her, die wird aber gleich wieder gekappt.wenn ihr meinen code wollt:
#include <windows.h> #include <stdio.h> #include <stdlib.h> #include <winsock2.h> #include <process.h> //--------------------------------------------------------------- //defines: #ifndef NULL #define NULL (void*)0 #endif //--------------------------------------------------------------- //global variables: SOCKET s; //--------------------------------------------------------------- //funktions: long StartWinsock(); void Fehler(char Fehlerbereich[100]); void recive(PVOID); //--------------------------------------------------------------- int main(int argc, char *argv[]) { long rc; SOCKADDR_IN addr; rc = StartWinsock(); if(rc) { Fehler("StartWinsock gescheitert"); } else { printf("Winsock gestartet\n"); } s = socket(AF_INET, SOCK_STREAM, 0); if(s == INVALID_SOCKET) { Fehler("Socket konnte nicht erstellt werden"); } 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 = inet_addr("217.184.15.70"); rc = connect(s, (SOCKADDR*)&addr, sizeof(SOCKADDR)); if(rc == SOCKET_ERROR) { Fehler("connect gescheitert"); } else { printf("Verbunden mit 217.184.15.70 (User)\n"); } char buffer[257]; printf("\nBereit fuer die Eingabe (maximal 256 Zeichen)\n"); _beginthread(recive, 0, NULL); while(1) { fgets(buffer, sizeof(buffer), stdin); rc = send(s, buffer, strlen(buffer), 0); if((rc == SOCKET_ERROR) || (!rc)) { Fehler("send gescheitert"); } } } //--------------------------------------------------------------- long StartWinsock() { WSADATA wsa; return WSAStartup(MAKEWORD(2,0), &wsa); } //--------------------------------------------------------------- void Fehler(char Fehlerbereich[100]) { char Fehlermeldung[200]; sprintf(Fehlermeldung, "Fehler: %s, fehler code: %d\n", Fehlerbereich, WSAGetLastError()); MessageBox(NULL, Fehlermeldung, "Schwerer Fehler", MB_ICONERROR | MB_OK); _endthread(); exit(-1); } //--------------------------------------------------------------- void recive(PVOID pvoid) { long rc; char buffer2[257]; while(1) { rc = recv(s, buffer2, 256, 0); if((rc == SOCKET_ERROR) || (!rc)) { Fehler("Verbindung getrennt"); } else { buffer2[rc] = '\0'; printf("%s", buffer2); } } return; }danke...
-
dein thread kann nicht auf die globale variable socket zurückgreifen somit ist
sie ungültig
übergeb den socket mit an den thread_beginthread(recive, 0, &s); void recive(PVOID pvoid) SOCKET socket = *(SOCKET*)pvoid; // ..
-
Danke, funktioniert aber immer noch nicht.
Was kann ich tun, um den Fehler zu finden?