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

    [c++] ip da comunicare al server

    Ciao a tutti, avrei bisogno di un piccolo aiuto. Sto costruendo un semplice prog client server con le winsock in c++ (come compilatore: borland c++ builder). Ciò di cui ho bisogno è che al momento in cui il clienti si connette, una volta ricevuto il mex di benvenuto dal server, invii il suo indirizzo ip, o altrimenti che il server ricavi l'ip del client al momento della sua connessione. In poche parole, in un modo o nell'altro ho bisogno che il server conosca l'ip della macchina del client.

    Potete aiutarmi..............Grazie 1000


    ciao

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Non so come tu stabilisca la connessione nel tuo programma ma, se e' stabilita, il server conosce l'ip del client ...

  3. #3
    la connessione è client server, ovvero il client conosce l'ip del server e la porta di connessione, una volta connesso il server come fa a conoscere l'ip del client ?

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Te l'ho detto ... quale e' il codice in cui hai implementato la connessione?

  5. #5
    ----------------------------------------
    CLIENT:
    ----------------------------------------

    SOCKET nuovosocket;

    sockaddr_in nuovosocket_addr;
    WSADATA data;

    WORD p;
    p=MAKEWORD(2,0);
    err=WSAStartup(p,&data);


    nuovosocket=socket(PF_INET,SOCK_STREAM,0); // inizializzo il socket
    nuovosocket_addr.sin_family=PF_INET; // si usa il protocollo TCP/IP
    nuovosocket_addr.sin_port=htons(porta); //la porta a cui connettersi
    nuovosocket_addr.sin_addr.S_un.S_un_b.s_b1=127; // creo ip del server
    nuovosocket_addr.sin_addr.S_un.S_un_b.s_b2=0;
    nuovosocket_addr.sin_addr.S_un.S_un_b.s_b3=0;
    nuovosocket_addr.sin_addr.S_un.S_un_b.s_b4=1;
    lun=sizeof(struct sockaddr);
    err=connect(nuovosocket,(struct sockaddr*)&nuovosocket_addr,lun);

    n=recv(nuovosocket,mess,100,0); // messaggio di benvenuto dal Server



    ----------------------------------------
    SERVER:
    ----------------------------------------

    SOCKET primo, dati; //inizializzo i due socket

    sockaddr_in primoadd, datiadd; //mi servono per impostare i socket

    WSADATA data;
    WORD ver;
    ver=MAKEWORD(2,0);
    err=WSAStartup(ver,&data);

    printf("%s",&testo);


    primo=socket(PF_INET,SOCK_STREAM,0); //specifico il tipo di socket
    primoadd.sin_family=PF_INET;
    primoadd.sin_port=htons(23); //setto la porta
    primoadd.sin_addr.s_addr=INADDR_ANY; //accetto qualsiasi indirizzo
    lun=sizeof(sockaddr);



    err=bind(primo,(sockaddr*)&primoadd,sizeof(sockadd r_in));
    err=listen(primo,backlog); //mi metto in ascolto
    dati=accept(primo,(sockaddr*)&datiadd,LPINT(&lun)) ;


    send(dati,mex,len(mex),0); //invio il messaggio di benvenuto al client


    -------------------------------------------

    ecco il codice........
    come faccio a sapere quale ip ha la macchina del client ?


    grazie ancora

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Devi esaminare la struttura

    datiadd

    che hai usato nell'accettare la connessione.

  7. #7
    potresti farmi un esempio perfavore ?
    Perchè non ci ho capito molto


    grazie

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Beh, ma allora come hai scritto il programma?

    Quando scrivi

    dati=accept(primo,(sockaddr*)&datiadd,LPINT(&lun)) ;

    perche' passi il puntatore alla struttura datiadd?
    Il secondo parametro della accept e' :

    "Optional pointer to a buffer that receives the address of the connecting entity, as known to the communications layer."

    Quindi dovrebbe essere qualcosa del genere ...

    codice:
    char ip[50];
    unsigned short port;
    inet_ntop(AF_INET, &(((struct sockaddr_in *)datiadd)->sin_addr), ip, sizeof (ip));
    port = ntohs(((struct sockaddr_in *)datiadd)->sin_port);
    printf("IP %s PORT %hu\n", ip, port);

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 © 2025 vBulletin Solutions, Inc. All rights reserved.