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++ - I primi passi con winsock
Forum - C/C++ - I primi passi con winsock

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
### (Normal User)
Rookie


Messaggi: 44
Iscritto: 07/09/2006

Segnala al moderatore
Postato alle 20:26
Giovedì, 07/09/2006
Questo topic è stato chiuso dal moderatore

Sto iniziano a studiare i socket, ho letto il codice del programma SendMayl.

Qualcuno sarebbe così gentile da spiegarmi la parte che permette dal nome dell'host
di impostare client.sin_addr? Oppure consigliarmi un link al riguardo

Grazie :k::k:

Ultima modifica effettuata da ### il 07/09/2006 alle 20:27
PM
Avatar
pierotofy (Admin)
Guru^2


Messaggi: 6230
Iscritto: 04/12/2003

Segnala al moderatore
Postato alle 0:35
Venerdì, 08/09/2006
Codice sorgente - presumibilmente Plain Text

  1. client.sin_addr=*((struct in_addr *)hostinfo->h_addr);



client è la struttura che contiene le informazioni necessarie ad effettuare la connessione con il server.
sin_addr è una variabile della struttura client che contiene l'indirizzo IP.
hostinfo è una variabile di tipo struct hostent che si occupa di risolvere i DNS (sin_addr non accetta nomi di host, solamente indirizzi IP, quindi se un utente digita "mail.libero.it" hostinfo si occupa di convertire questo nome in 193.70.x.x) e la sua variabile h_addr contiene tale indirizzo IP (che è stata impostata durante la chiamata a
Codice sorgente - presumibilmente Plain Text

  1. hostinfo=gethostbyname(target);



il codice
Codice sorgente - presumibilmente Plain Text

  1. ..(struct in_addr *)..


è un cast esplicito richiesto dal compilatore C per sapere che tipo di dato deve aspettarsi la variabile client.sin_addr.

Se ti serve sapere altro chiedi pure.


Il mio blog: https://piero.dev
PM
Avatar
### (Normal User)
Rookie


Messaggi: 44
Iscritto: 07/09/2006

Segnala al moderatore
Postato alle 0:48
Venerdì, 08/09/2006
Grazie!!

Comunque non riuscivo a far funzionare le cose più che altro per un banale errore di tipo variabile, in ogni caso ti sei spiegato molto bene e adesso ho le idee più chiare.

Modificando il tuo programma sono riuscito a fare un programma console che si connette a un server, uso la tua stessa funzione recv_packet per ricevere i messaggi dal server, il problema è che se stampo questi sulla console vedo sempre un cuoricino e il simbolo =.

Hai qualche idea riguardo la possibile causa?

Grazie ancora, ciao ciao!! :k:

PM
Avatar
### (Normal User)
Rookie


Messaggi: 44
Iscritto: 07/09/2006

Segnala al moderatore
Postato alle 11:12
Venerdì, 08/09/2006

Tranquillo Piero, ho risolto, grazie comunque per la disponibilità;)

PM
Avatar
### (Normal User)
Rookie


Messaggi: 44
Iscritto: 07/09/2006

Segnala al moderatore
Postato alle 12:57
Martedì, 12/09/2006
Sono andato avanti con il winsock ma non riesco a risolvere un problema, sto facendo un semplice programma che si connetta a un server, invii alcuni messaggi da tastiera e chiuda la connessione. Per adesso riesco a ricevere il messaggio di benvenuto ma quasi sempre il programma si blocca dopo l'invio del primo messaggio

Codice sorgente - presumibilmente C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include <string.h>
  5.  
  6. #ifdef WIN32
  7.   #include <winsock2.h>
  8. #else
  9.   #define SOCKET_ERROR 0
  10.   #include <sys/socket.h>
  11.   #include <netinet/in.h>
  12.   #include <netdb.h>
  13. #endif
  14.  
  15. #define MAX_CHAR_LENGTH 60
  16. #define MAX_MESSAGE_LENGTH 4096
  17.  
  18. HANDLE MyHandle;
  19.  
  20. int ConnectTo(char *target,int PORT) //Funzione di connessione al server specificato
  21. {
  22.     int sock;
  23.     struct sockaddr_in client;
  24.     struct hostent *hostandress;
  25.  
  26.     //Inizializza il socket
  27.     WORD version;
  28.     WSADATA WSAData;
  29.     version=MAKEWORD(1,1);
  30.     WSAStartup(version, &WSAData);
  31.  
  32.     //Avvia il socket
  33.     if( (sock=socket(AF_INET,SOCK_STREAM,0)) == SOCKET_ERROR )
  34.     {
  35.        printf("error at socket \n");
  36.        return -1;
  37.     }
  38.  
  39.     //Ricava l'indirizzo dell'host
  40.  
  41.     hostandress=gethostbyname(target);
  42.     if( hostandress==NULL )
  43.     {
  44.        printf("error at gethostbyname \n");
  45.        return -1;
  46.     }
  47.  
  48.     //Imposta la connessione con il server...
  49.     client.sin_family=AF_INET;
  50.     client.sin_addr=*((struct in_addr *)hostandress->h_addr);
  51.     client.sin_port=htons(PORT);
  52.  
  53.     //Si connette al server...
  54.  
  55.     if( connect(sock,(struct sockaddr *)&client, sizeof(client)) )
  56.     {
  57.        printf("error at server connection \n");
  58.        return -1;
  59.     }
  60.  
  61.     printf("Connection as success full!! \n");
  62.  
  63.  return sock;
  64.      
  65. }
  66.  
  67. void Receiv(int sock) //Funzione per la ricezione dei dati
  68. {
  69.  char *response;
  70.  int res;
  71.  
  72.  response=malloc(sizeof(char)*MAX_CHAR_LENGTH);
  73.  
  74.  res=recv(sock,response,MAX_CHAR_LENGTH,0);
  75.  
  76.  if( res>=0 )
  77.  {
  78.      *(response+res)='\0';
  79.  }
  80.  
  81.  SetConsoleTextAttribute(MyHandle,10);
  82.  printf(response);
  83.  SetConsoleTextAttribute(MyHandle,12);
  84.  
  85. }
  86.  
  87. int Send(int sock, char *message) //Funzione per l'invio dei dati
  88. {
  89.     int len=strlen(message);
  90.    
  91.     if( send(sock,message,len,0) == SOCKET_ERROR )
  92.     {
  93.         printf("error at send \n");    
  94.         return -1;                            
  95.     }
  96.    
  97.     return 0;
  98. }
  99. ///////////////////////////////*MAIN*/////////////////////////////////
  100. int main(int argc, char *argv[])
  101. {
  102.     MyHandle=GetStdHandle(STD_OUTPUT_HANDLE);
  103.     SetConsoleTitle("WINSOCK CONVERSATION 1.0");  
  104.    
  105.     int sock;
  106.     int port;  
  107.     char *target;
  108.     char *message;
  109.        
  110.     target=malloc(sizeof(char)*MAX_CHAR_LENGTH);
  111.     message=malloc(sizeof(char)*MAX_CHAR_LENGTH);
  112.    
  113.      
  114.     CONNECT:;    
  115.        
  116.     printf("Connect To: ");
  117.     scanf("%s",target);
  118.     printf("Port: ");
  119.     scanf("%d",&port);    
  120.  
  121.     sock=ConnectTo(target,port);
  122.    
  123.     if( sock==-1 )
  124.     {
  125.         goto CONNECT;                
  126.     }
  127.    
  128.     for(;;)
  129.     {  
  130.            Receiv(sock);
  131.            scanf("%s",message);      
  132.            Send(sock,message);        
  133.     }
  134.        
  135.  
  136.   system("PAUSE");     
  137.   return 0;
  138. }



non ho ancora scritto il codice per chiudere la connessione perchè prima voglio risolvere il problema.:d

Grazie a chi mi sia di aiuto!:k::k:

Ultima modifica effettuata da ### il 12/09/2006 alle 12:58
PM
Avatar
norbix89 (Normal User)
Newbie


Messaggi: 13
Iscritto: 22/10/2006

Segnala al moderatore
Postato alle 13:06
Domenica, 22/10/2006
ho fatto da poco il mio client e server FUNZIONANTI


solo che non riesce mai a risolvere i DNS in IP, come RISOLVO il problema?

PM
Avatar
norbix89 (Normal User)
Newbie


Messaggi: 13
Iscritto: 22/10/2006

Segnala al moderatore
Postato alle 18:00
Martedì, 07/11/2006
nessuno ha una soluzione?

PM
Avatar
norbix89 (Normal User)
Newbie


Messaggi: 13
Iscritto: 22/10/2006

Segnala al moderatore
Postato alle 16:43
Venerdì, 17/11/2006
come per quasi ogni altra cosa riguardante computer/programmazzione, mi sono arrangiato

se volete potete visitare xxx e trovate una chat nei progetti C/C++, fatta da me

Ho modificato in quanto violava il regolamento

Ultima modifica effettuata da pierotofy il 18/11/2006 alle 5:21
PM
Avatar
baffardello (Normal User)
Newbie


Messaggi: 1
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 12:36
Lunedì, 06/04/2009
Buon giorno,
vorrei creare un piccolo programma da compilare con Dev C++
ver. 4.9.9.2 ma non ho trovato le librerie winsock
e gli header file all'interno dell'installazione,
Mi potreste indicare dove scaricali,
grazie.

PM
Pagine: [ 1 2 ] Precedente | Prossimo