01/03/22 18:03
Gemini
Salve a tutti non so se il titolo va bene ma non sapevo come scrivere XD in ogni caso ho un problemino che non riesco a capire dove sbaglio in pratica ho creato un server e client con winsock2 la connessione funziona ma quando ricevo un messaggio dal alla fine della stringa mi escono simboli strani.... qualcuno sa aiutarmi vi mostro il codice e alcuni screen
CLASSE NETWORK
NETWORK.h
NETWORK.CPP
CLIENT.CPP
SERVER.CPP
CLASSE NETWORK
NETWORK.h
#include <winsock2.h> #pragma comment(lib, "ws2_32.lib") class Network { public: //Metodi Connessione int ServerTCP(); int ClientTCP(); //Metodi Invio/Ricezione dati void socketSend(char *sendbuf); char* socketRecv(); private: //Variabili Private WSAData wsaData; WORD DllVersion = MAKEWORD(2, 1); SOCKET s_socket; SOCKET a_socket; int c; struct sockaddr_in sokAddr_in; struct sockaddr_in client; //Metodi privati int initSocket(); int createSocket(int type); bool closeSocket(); int bindSocket(); int acceptSocket(); int connectSocket(); };
NETWORK.CPP
#include "Network.h" #include <stdio.h> //===============================================// //= ServerTCP =// //===============================================// int Network::ServerTCP() { if(initSocket() != 0) { printf("Errore durante ServerTCP() -- initSocket()\n"); return -1; } if(createSocket(0) != 0) { printf("Errore durante ServerTCP() -- createSocket()\n"); return -1; } if(bindSocket() != 0) { printf("Errore durante ServerTCP() -- bindSocket()\n"); return -1; } if(acceptSocket() != 0) { printf("Errore durante ServerTCP() -- acceptSocket()\n"); return -1; } return 0; } //===============================================// //= ClientTCP =// //===============================================// int Network::ClientTCP() { if(initSocket() != 0) { printf("Errore durante ClientTCP() -- initSocket()\n"); return -1; } if(createSocket(1) != 0) { printf("Errore durante ClientTCP() -- createSocket()\n"); return -1; } while(connectSocket() != 0) { printf("Errore durante ClientTCP() -- connectSocket()\n"); //return -1; } return 0; } //===============================================// //= socketSend =// //===============================================// void Network::socketSend(char *sendbuf) { int sendResult; sendResult = send(a_socket, sendbuf,(int)strlen(sendbuf), 0); if(sendResult == SOCKET_ERROR) { printf("socketSend() Fallito %d\n",WSAGetLastError()); closeSocket(); return; } printf("Byte invitati %d\n",sendResult); } //===============================================// //= socketRecv =// //===============================================// char* Network::socketRecv() { int recvResult; char recvbuf[1024]; int recvbuflen = 1024; char* tmp = recvbuf; do { recvResult = recv(s_socket,recvbuf,recvbuflen,0); if(recvResult > 0) { printf("byte ricevuti: %d\n", recvResult); //printf("%s\n",recvbuf); return tmp; } else if(recvResult == 0) { printf("Connessione chiusa\n"); closeSocket(); return NULL; } else { printf("Fallito socketRecv() con errore %d\n",WSAGetLastError()); return NULL; } } while (recvResult > 0); } //===============================================// //= initSocket =// //===============================================// int Network::initSocket() { if (WSAStartup(DllVersion, &wsaData) != 0) { printf("Fallito initSocket. Errore: %d", WSAGetLastError()); return -1; } //Da cancellare //server solo per vedere se � andato tutto bene printf("initSocket OK!\n"); return 0; } //===============================================// //= createSocket =// //===============================================// int Network::createSocket(int type) { if ((s_socket = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) { printf("Fallito createSocket. Errore: %d", WSAGetLastError()); return -1; } if (type == 0)//SERVER { //Prepare the sockaddr_in structure sokAddr_in.sin_family = AF_INET; sokAddr_in.sin_addr.s_addr = INADDR_ANY; sokAddr_in.sin_port = htons(8888); } else if (type == 1)//CLIENT { //Prepare the sockaddr_in structure sokAddr_in.sin_family = AF_INET; sokAddr_in.sin_addr.s_addr = inet_addr("127.0.0.1"); //server.sin_addr.s_addr = inet_pton(AF_INET,"127.0.0.1",&server.sin_addr); sokAddr_in.sin_port = htons(8888); } //Da cancellare //server solo per vedere se � andato tutto bene printf("createSocket OK!\n"); return 0; } //===============================================// //= closeSocket =// //===============================================// bool Network::closeSocket() { closesocket(s_socket); WSACleanup(); return true; } //===============================================// //= bindSocket =// //===============================================// int Network::bindSocket() { if (bind(s_socket, (struct sockaddr*)&sokAddr_in, sizeof(sokAddr_in)) == SOCKET_ERROR) { printf("Fallito bindSocket. Errore: %d", WSAGetLastError()); return -1; } //Listen listen(s_socket, 3); //Da cancellare //server solo per vedere se � andato tutto bene printf("bindSocket OK!\n"); return 0; } //===============================================// //= acceptSocket =// //===============================================// int Network::acceptSocket() { c = sizeof(struct sockaddr_in); a_socket = accept(s_socket, (struct sockaddr*)&client, &c); if (a_socket == INVALID_SOCKET) { printf("Fallito acceptSocket. Errore: %d", WSAGetLastError()); return -1; } //Da cancellare //server solo per vedere se � andato tutto bene printf("acceptSocket OK!\n"); return 0; } //===============================================// //= connectSocket =// //===============================================// int Network::connectSocket() { if (connect(s_socket, (struct sockaddr*)&sokAddr_in, sizeof(sokAddr_in)) < 0) { printf("Fallito connectSocket. Errore: %d\n", WSAGetLastError()); return -1; } //Da cancellare //server solo per vedere se � andato tutto bene printf("connectSocket OK!\n"); return 0; }
CLIENT.CPP
#include "../../Utils/Network.h" #include <stdio.h> int main() { Network networks; if(networks.ClientTCP() != 0) { printf("Errore durante ClientTCP()\n"); return -1; } // //Se il client è connesso // printf("Connesso!\n"); while(true) { char* tmp = networks.socketRecv(); printf("%s\n",tmp); //networks.socketRecv(); } return 0; }
SERVER.CPP
#include "../../Utils/Network.h" #include <stdio.h> int main() { Network networks; if(networks.ServerTCP() != 0) { printf("Errore durante ServerTCP()\n"); return -1; } // //Se il client è connesso // while(true) { char ok[1024]; char *msg; printf("Connesso!\n"); scanf("%s",ok); msg = ok; networks.socketSend(msg); } return 0; }