Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    20

    [c++] Problema con i socket

    Ciao a tutti,
    ho provato a svillupare un semplice client-server con Winsock che funziona in locale ma non su due diversi computer... Posto il codice, sperando che possiate aiutarmi!

    Server:

    codice:
    #include <iostream>
    #include <winsock.h>
    #include <string.h>
    using namespace std;
    
    int main() {
    
        short nPort = 2000;
        char message[256];
        char szBuf[256];
        int nRet;
        int nLen = sizeof(SOCKADDR);
        
        WORD wRequested = MAKEWORD(1,1);
        WSADATA wsaData;    
        
        nRet = WSAStartup(wRequested,&wsaData);
        
        SOCKET xSocket;
        xSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
        
        SOCKADDR_IN saServer;
        saServer.sin_family = AF_INET;
        saServer.sin_addr.s_addr = INADDR_ANY;
        saServer.sin_port = htons(nPort);
        
        nRet = bind(xSocket, (LPSOCKADDR)&saServer, sizeof(struct sockaddr));
        
        SOCKADDR_IN saClient;
        
        loop:
        memset(szBuf, 0, sizeof(szBuf));
        nRet = recvfrom(xSocket, szBuf, sizeof(szBuf), 0, (LPSOCKADDR)&saClient, &nLen);
        
        cout<< szBuf<< endl;
        
        memset(szBuf, 0, sizeof(szBuf));
        cout<< "\t";
        
        cin.get(message, 256, '\n');
        while(cin.get() != '\n');
        
        strcpy(szBuf, message);
        sendto (xSocket, szBuf, strlen(szBuf), 0, (LPSOCKADDR)&saClient, nLen);
        goto loop;
        
        closesocket (xSocket);
        WSACleanup();
        
        system("PAUSE");
    }
    ------------------------------------

    Client:

    codice:
    #include <winsock.h>
    #include <iostream>
    #include <string.h>
    using namespace std;
    
    int main() {
        short nPort = 2000;
        char szBuf[256];
        int nRet;
        int nLen = sizeof(SOCKADDR);
        int nLen2;
        char message[256];
        
        WORD wRequested = MAKEWORD(1,1);
        WSADATA wsaData;
        
        nRet = WSAStartup(wRequested, &wsaData);
        
        // LPHOSTENT lpHostEntry = gethostbyname("camcatie");
        
        SOCKET xSocket;
        xSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
        
        SOCKADDR_IN saServer;
        saServer.sin_family = AF_INET;
        // saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);
        saServer.sin_addr.S_un.S_un_b.s_b1 = 10; 
        saServer.sin_addr.S_un.S_un_b.s_b2 = 0; 
        saServer.sin_addr.S_un.S_un_b.s_b3 = 0; 
        saServer.sin_addr.S_un.S_un_b.s_b4 = 1; 
        saServer.sin_port = htons(nPort);
        
        loop:
        memset(szBuf, 0, sizeof(szBuf));
        recvfrom(xSocket, szBuf, sizeof(szBuf), 0, (LPSOCKADDR)&saServer, &nLen);
        cout<< szBuf<< endl;
     
        cout<< "\t";
        cin.get(message, 256, '\n');
        while (cin.get() != '\n');
        
        memset(szBuf, 0, sizeof(szBuf));
        strcpy(szBuf, message);
        sendto(xSocket, szBuf, strlen(szBuf), 0, (LPSOCKADDR)&saServer, nLen);
        goto loop;
        
        closesocket(xSocket);
        WSACleanup();
            
        system("PAUSE");
    }

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Troppo poco per capire quale e' l'errore ...

    Potrebbe essere un banale problema di risoluzione dei nomi ...

    Come sono collegati i PC? Il nome del server viene risolto correttamente dal client? Hai provato usando l'IP del server al posto del nome? Cosa succede se scrivi

    TRACERT nomeserver

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    20
    Si infatti la prima versione usavo il nome del server, ma dopo l'ho escluso con i commenti e uso l'indirizzo ip, i due computer sono collegati in internet e non ho idea di come fare i controlli che mi hai chiesto. Dove inserisco il TRACERT nomeserver, posso anche usare l'ip con TRACERT?

    Grazie

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    TRACERT lo usi in una finestra DOS.

    Pero' non ho capito ... il computer e' su internet ed e' un server Web o qualcosa di registrato in un DNS oppure e' un tuo server personale?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    20
    ok, da bravo pirlone ho messo l'indirizzo ip sbagliato. I due computer sono due computer normali, non sono server. Adesso se uso il server su un computer e il client sull'altro funziona, se faccio l'inverso no. Ho anche provato a disabilitare il firewall sulla porta per provare, ma ninete. TRCERT funziona senza problemi...

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    Disabilita completamente i fw da ambedue le parti ...

    Per il resto non posso dirti di piu' ...

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    20
    Grazie in ogni caso. Magari posso ancora usufruire della tua bonta' chiedendoti un consiglio del tipo:

    Con il codice che ho scritto funziona solo il client manda un messaggio, il server manda un messaggio il client manda...

    C'e' la possibilita' secondo te di eliminare questo blocco? Forse devo aprire due finestre una solo per ascoltare e una solo per scrivere?

    Grazie ancora!

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    20
    Ok, ho trovato un articolo interessante sui multithreading in c++ a questo link

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.