Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    [VC++] Socket: problema con recv

    salve!
    ho un problemino sul server socket che sto facendo.
    in pratica manda i messaggi al client ma sembra che ci sia un problema in in ricezione, in quanto in console stampa -1.
    supponendo di aver fatto bene sul client, secondo voi dove potrei sabgliare sul server:
    codice:
    int Server::initConnection() {
    	cout << "SERVER STARTED. PRESS ENTER EXIT" << endl;
    	WSADATA wsaData;
        sockaddr_in local;
    	sockaddr_in from;
    	int wsaret = WSAStartup(0x101, &wsaData);
    	int fromlen = sizeof(from);
    
        local.sin_family = AF_INET; // ADDRESS FAMILY
        local.sin_addr.s_addr = INADDR_ANY; // WILD CARD IP ADDRESS
        local.sin_port = htons((u_short) 20248); // PORT
        server = socket(AF_INET, SOCK_STREAM, 0);
    
        while(true)
        {
            char temp[512];
            inAscolto = accept(server, (struct sockaddr*) &from, &fromlen);
            sprintf_s(temp, "YOUR IP IS:  %s", inet_ntoa(from.sin_addr));
            send(inAscolto, temp, strlen(temp), 0);
            cout << "CONNECTION FROM " << inet_ntoa(from.sin_addr) << endl;
    	cout << recv(inAscolto, temp, strlen(temp), 0) << endl;
        }
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    42
    non devi scrivere il valore di ritorno della funzione recv() ma la variabile temp

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2012
    Messaggi
    707
    Oltre a quotare sidius aggiungo che quando ricevi devi usare sizeof(temp), non strlen(temp) altrimenti finiresti per ricevere al massimo per la lunghezza della tuo testo che prima hai spedito, cosa un po' assurda.

  4. #4
    ho modificato così, sennò ricevevo lo stesso messaggio che inviavo:
    codice:
        while(true)
        {
            char temp[512];
    		char temp2[512];
            inAscolto = accept(server, (struct sockaddr*) &from, &fromlen);
            sprintf_s(temp, "YOUR IP IS:  %s", inet_ntoa(from.sin_addr));
            send(inAscolto, temp, strlen(temp), 0);
            cout << "CONNECTION FROM: " << inet_ntoa(from.sin_addr) << endl;
    		recv(server, temp2, sizeof(temp2), 0);
    		cout << temp2 << endl;
        }
    c'è un altro problema.
    in pratica mi arriva un messaggio un pò strano:
    codice:
    simbolo_freccia_su frecia_sx_freccia_dx D
    se mi dite che qua sul server ho fatto giusto probabilem che ci sia un errore dall'altra parte.
    che mi dite???

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    42
    prova a fare il ZeroMemory() della variabile che riceve nel client subito dopo l'inizializzazione

  6. #6
    Originariamente inviato da sidius
    prova a fare il ZeroMemory() della variabile che riceve nel client subito dopo l'inizializzazione
    nn sono ancora molto esperto di c++.
    ho letto cosa si intende per ZeroMemory(), ma nn ho ben capito per quale variabile lo dovrei fare.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2012
    Messaggi
    42
    lo dovresti fare della variabile che riceve il messaggio nel client

    codice:
    char temp2[512];
    ZeroMemory(temp2, 512);
    recv(server, temp2, sizeof(temp2), 0);

  8. #8
    diciamo che al 99% ho appurato che il client sta a posto.
    adesso nn arriva più nulla a prescindere da zeromemory:
    codice:
    int Server::initConnection() {
    	cout << "SERVER STARTED. PRESS ENTER EXIT" << endl;
        WSADATA wsaData;
        sockaddr_in local;
        sockaddr_in from;
        int wsaret = WSAStartup(0x101, &wsaData);
        int fromlen = sizeof(from);
    
        local.sin_family = AF_INET; // ADDRESS FAMILY
        local.sin_addr.s_addr = INADDR_ANY; // WILD CARD IP ADDRESS
        local.sin_port = htons((u_short) 20248); // PORT
        server = socket(AF_INET, SOCK_STREAM, 0);
    
        while(true)
        {
            char temp[1024];
    	char temp2[1024];
    	ZeroMemory(temp2, 1024);
            inAscolto = accept(server, (struct sockaddr*) &from, &fromlen);
            sprintf_s(temp, "YOUR IP IS:  %s", inet_ntoa(from.sin_addr));
            send(inAscolto, temp, strlen(temp), 0);
            cout << "CONNECTION FROM: " << inet_ntoa(from.sin_addr) << endl;
    	recv(inAscolto, temp2, sizeof(temp2), 0);
    	cout << temp2 << endl;
        }
    
    }

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.