Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [c++]Classe Network errore override
Forum - C/C++ - [c++]Classe Network errore override

Avatar
Valcars92 (Normal User)
Newbie


Messaggi: 20
Iscritto: 17/07/2021

Segnala al moderatore
Postato alle 13:00
Domenica, 25/07/2021
Salve a tutti e come sempre eccomi a darvi fastidio XD....
Stavo provando a creare un client/server in c++ e fino a qui tutto ok funziona correttamente ma il problema mi arriva qunado cerco di implementare winsock in una classe... quando provo a dividere le funzioni per creare la connessione mi da errore di override della SOCKET vi mostro come ho provato a fare la classe.... sicuramente sarà sbagliata però voglio capire dove sbaglio e come risolvere cmq vi posto il sorgente

Main.cpp
Codice sorgente - presumibilmente C++

  1. #include "Network.h"
  2. #include <iostream>;
  3.  
  4. int main()
  5. {
  6.         Network network;
  7.  
  8.         network.Connection();
  9.  
  10.         system("PAUSE");
  11.         return 0;
  12. }



==================
Classe Network
=================

Network.h
Codice sorgente - presumibilmente C++

  1. class Network
  2. {
  3. public:
  4.        
  5.        
  6.         void Connection();
  7.  
  8. private:
  9.         SOCKET serverSocket;
  10.        
  11.         int tmpSocket;
  12.         struct sockaddr_in server;
  13.        
  14.  
  15.          void initSoket();
  16.          void createSocket();
  17.          void closeSocket();
  18.  
  19. };



Network.cpp
Codice sorgente - presumibilmente C++

  1. #include "Network.h"
  2. #include<winsock2.h>
  3. #include<stdio.h>
  4.  
  5. void Network::Connection()
  6. {
  7.        
  8.         initSoket();
  9.         createSocket();
  10.  
  11.         //Connect to remote server
  12.         if (connect(tmpSocket, (struct sockaddr*)&server, sizeof(server)) < 0)
  13.         {
  14.                 puts("connect error");
  15.                 return;
  16.         }
  17.  
  18.         puts("Connected");
  19.  
  20.         //TODO -----------------------
  21.         //Torna al Server.cpp
  22. }
  23.  
  24. void Network::initSoket()
  25. {
  26.         WSADATA wsa;
  27.  
  28.         printf("\nInitialising Winsock...");
  29.         if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
  30.         {
  31.                 printf("Failed. Error Code : %d", WSAGetLastError());
  32.                 return;
  33.         }
  34.  
  35.         printf("Initialised.\n");
  36. }
  37.  
  38. void Network::createSocket()
  39. {
  40.        
  41.  
  42.         //Create a socket
  43.         if ((serverSocket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
  44.         {
  45.                 printf("Could not create socket : %d", WSAGetLastError());
  46.         }
  47.  
  48.         printf("Socket created.\n");
  49.  
  50.         //Prepare the sockaddr_in structure
  51.         server.sin_addr.s_addr = inet_addr("127.0.0.1");
  52.         server.sin_family = AF_INET;
  53.         server.sin_port = htons(11000);
  54.  
  55.        
  56. }
  57.  
  58. void Network::closeSocket()
  59. {
  60.         closesocket(serverSocket);
  61.         WSACleanup();
  62. }



Spero che non mi bestemmiate addosso XD cmq attendo vostre risposte e grazie in anticipo :)

Ultima modifica effettuata da Valcars92 il 25/07/2021 alle 13:09
PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6176
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 16:13
Domenica, 25/07/2021
La linea

#include <winsock2.h>

spostala da Network.cpp a Network.h

E poi nel Network.cpp manca anche una

#pragma comment(lib, "Ws2_32.lib")

per la libreria

Prima di avventurarti in codice complesso, perché non parti dalle basi che, evidentemente, ti mancano?
Altrimenti ti fermerai ogni momento e non capirai nulla dalle correzioni del forum.

La programmazione C++ va studiata sui libri per il tempo necessario, non copiando incollando codice con le indicazioni di un forum.

P.S. Perché cominciare dai socket quando dovresti studiare le basi??
Vuoi iniziare a scrivere un programma con i socket (magari qualcosa tipo "controllo remoto del PC" o altre sciocchezze simili)? Non perdere il tuo tempo, studia le cose serie...

Fra l'altro potresti utilizzare librerie apposite del C++ senza dover riscrivere tutto. Ad esempio esiste questa

https://renenyffenegger.ch/notes/development/languages/C-C- ...

e mille altre. Oltre a quelle inserite in MFC ... CSocket, CAsyncSocket e tante altre.

Ultima modifica effettuata da nessuno il 26/07/2021 alle 9:21


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti (uno dei padri fondatori del moderno Calcolo delle probabilità) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote