Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ -  Connessione tra due Pc attraverso socket
Forum - C/C++ - Connessione tra due Pc attraverso socket

Avatar
kikkoHack (Normal User)
Newbie


Messaggi: 6
Iscritto: 18/02/2007

Segnala al moderatore
Postato alle 16:19
Venerdì, 13/04/2007
Salve a tutti .... sono un nuovo utente....

Ho un piccolo problema che vorrei cercare di risolvere....

Mi sono da poco avvicinato alla Programmazione delle socket e ho creato due

programmini ( client e server ) che comunicano tra loro su due PC

collegati a internet in maniera differente:

il primo ( 1 ) attraverso connessione wireless;

il secondo ( 2 ) attraverso connessione ethernet ( cavo );

il problema è questo:

quando (1) è client e (2) è server tutto ok!!! la connessione avviene!!!!

nel caso inverso NO.... credo per una questione di Ip ...

CLIENT

Codice sorgente - presumibilmente C++

  1. //  ****** Inclusione delle Librerie ******
  2.  
  3. #include <windows.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <winsock.h>
  7. #pragma comment(lib,"Ws2_32.lib")
  8. #define     MB     1024
  9.  
  10.  
  11.  
  12. char mex_ricevuto [MB];
  13.  
  14. char mex_inviato  [MB]= "CoNnEsSiOnE AvVeNuTa cOn sUcCeSsO\n\n\n-== CLIENT ==- ";
  15.  
  16. // ****** Funzione main(   )
  17.  
  18. void main()
  19. {
  20.    WSADATA wsaData;        
  21.    
  22.    SOCKET Sock;                            // Variabili tipo SOCKET
  23.    
  24.    WSAStartup(MAKEWORD(2 ,2), &wsaData);
  25.  
  26.    /* Creazione socket */
  27.    Sock= socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );
  28.  
  29.   /* Riempiamo la struttura */
  30.    SOCKADDR_IN service;
  31.    service.sin_family            =  AF_INET;
  32.    service.sin_port            =  htons( -porta- );
  33.    service.sin_addr.s_addr     =  inet_addr( "---Indirizzo IP---" );  
  34.  
  35.    /* Connessione al Server */
  36.    connect( Sock , (SOCKADDR*)&service , sizeof(service) );
  37.  
  38.    /* Funzione send(   ) */
  39.    send( Sock , mex_inviato , strlen(mex_inviato)+1, 0 );
  40.  
  41.    /* Funzione recv(   ) */
  42.    int ibyte;
  43.    ibyte = recv( Sock, mex_ricevuto , MB , 0 );  
  44.    printf("%s \n\n",mex_ricevuto);
  45.    printf("Byte ricevuti :\t %d\n\n\n",ibyte);
  46.  
  47.    /* Chiusura del programma */
  48.    closesocket(Sock);
  49.    WSACleanup();
  50. }




SERVER

Codice sorgente - presumibilmente C++

  1. //  ****** Inclusione delle Librerie ******
  2.  
  3. #include <windows.h>
  4. #include <stdio.h>
  5. #include <string.h>
  6. #include <winsock.h>
  7. #pragma comment(lib,"Ws2_32.lib")
  8. #define     MB     1024
  9.  
  10.  
  11.  
  12.  
  13.  
  14. char mex_ricevuto [MB];
  15.  
  16. char mex_inviato  [MB]= "CoNnEsSiOnE AvVeNuTa cOn sUcCeSsO\n\n\n-== SERVER ==- ";
  17.  
  18.  
  19.  
  20. // ****** Funzione main(   )
  21.  
  22. void main()
  23. {
  24.    WSADATA wsaData;                      
  25.    
  26.    SOCKET ServerSocket, ClientSocket;        // Variabili tipo SOCKET
  27.    
  28.    WSAStartup(MAKEWORD(2 ,2), &wsaData);
  29.    
  30.  
  31.    ServerSocket= socket( AF_INET, SOCK_STREAM, IPPROTO_TCP );      
  32.  
  33.    /* Riempiamo la struttura */
  34.    SOCKADDR_IN service;
  35.    
  36.    service.sin_family            =  AF_INET;
  37.    service.sin_port            =  htons( 4444 );
  38.    service.sin_addr.s_addr     =  INADDR_ANY;
  39.    
  40.    /* Assegnare porta e Ip alla socket  */
  41.    bind( ServerSocket, (SOCKADDR*) &service, sizeof(service));
  42.  
  43.    /* Mettiti in ascolto per al massimo 1 client */
  44.    listen(ServerSocket,1);
  45.  
  46.    /* Accettare una nuova connessione... */
  47.    printf( "Aspetto connessione Client...\n\n\n" );
  48.    while(TRUE)
  49.    {
  50.        ClientSocket = SOCKET_ERROR;      
  51.        
  52.        while ( ClientSocket == SOCKET_ERROR )
  53.                ClientSocket = accept( ServerSocket, NULL, NULL );
  54.        
  55.        printf( "Client Connesso\n\n\n");
  56.        break;  
  57.    }
  58.  
  59.    
  60.    /* Funzione recv(   ) */
  61.    int ibyte;
  62.    ibyte = recv( ClientSocket, mex_ricevuto , MB , 0 );  
  63.    printf("%s \n\n",mex_ricevuto);
  64.    printf("Byte ricevuti :\t %d\n\n\n",ibyte);
  65.  
  66.  
  67.    /* Funzione send(   ) */
  68.    send( ClientSocket , mex_inviato , strlen(mex_inviato)+1 ,0);
  69.  
  70.    
  71.    /* Chiusura del programma */
  72.    closesocket (ServerSocket);
  73.    closesocket (ClientSocket);
  74.    WSACleanup();
  75. }



Anche quando uso Beatrix capita la stessa cosa....


Aiuto!!!!:d:d

Ultima modifica effettuata da kikkoHack il 13/04/2007 alle 16:21
PM Quote
Avatar
netarrow (Admin)
Guru^2


Messaggi: 2502
Iscritto: 12/05/2004

Segnala al moderatore
Postato alle 21:39
Giovedì, 19/04/2007
sono in lan questi due PC? forse è un problema di router.

PM Quote
Avatar
kikkoHack (Normal User)
Newbie


Messaggi: 6
Iscritto: 18/02/2007

Segnala al moderatore
Postato alle 15:08
Venerdì, 20/04/2007
Testo quotato

Postato originariamente da netarrow:

sono in lan questi due PC? forse è un problema di router.



Grazie per la risposta :k: allora non sono in lan e non uso router...ho provato questa cosa con 2 pc che hanno provider differenti....

:-|:-|:-|:-|

PM Quote
Avatar
nikipe_silver (Founder Member)
Expert


Messaggi: 339
Iscritto: 20/09/2005

Segnala al moderatore
Postato alle 17:54
Venerdì, 20/04/2007
Non penso sia un problema di socket ma di rete..
Cerca di spiegare meglio come questi 2 computer sono collegati...

PM Quote
Avatar
Shutdown (Founder Member)
Guru


Messaggi: 1212
Iscritto: 10/09/2005

Segnala al moderatore
Postato alle 18:36
Venerdì, 27/04/2007
Lo credo anche io.

PM Quote