PDA

View Full Version : [C / c++] doveposso scaricare delle librerie? (es. netinet/in.h )


$te
21-01-2008, 21:33
avrei bisogno di queste librerie di cui devc++ nn dispone, ma in rete non ho trovato nessuna pagina da cui scaricarle.
QUeste sono le librerie:

#include <unistd.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <errno.h>

grazie

variabilepippo
21-01-2008, 21:39
Non sono librerie ma headers, li trovi in omaggio con i compilatori per Linux e con CygWin.

$te
21-01-2008, 21:43
ma un sito da cui scaricare semplicemente questi headers?

andbin
21-01-2008, 21:44
avrei bisogno di queste librerie di cui devc++ nn dispone, ma in rete non ho trovato nessuna pagina da cui scaricarle.
QUeste sono le librerie:

#include <unistd.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <errno.h>

grazieerrno.h c'è sicuramente .. è standard. sys/types.h dovrebbe pure esserci. Le altre non credo, sono tipiche dei sistemi Unix-like (specialmente netinet/in.h).

La mia impressione è che vuoi usare delle cose che sono tipiche dei sistemi come Linux ma di cui non c'è una corrispondenza diretta "portabile" su Windows (a meno di usare tools/librerie che sono un porting di ciò che esiste su Linux).
Invece di cercare queste cose, dovresti specificare prima bene cosa vuoi fare.

variabilepippo
21-01-2008, 21:46
E una volta scaricati cosa ci fai? Alcuni degli headers elencati non sono inclusi nel pacchetto Dev-C++ perché non sono compatibili con MinGW, probabilmente il progetto che stai cercando di compilare non può funzionare su Windows (a meno di provare con CygWin (http://www.cygwin.com/)).

$te
21-01-2008, 21:52
volevo compilare un esempio di clinet-server trovato su internet (ne ho provati molti, ma ancora nessuno che funzioni).


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/socket.h>
#include <errno.h>

// Porta per la comunicazione
#define PORT 3666

// Inizializzazione della variabile sockaddr_in
void addr_init (struct sockaddr_in *addr, int port, long int ip) {
addr->sin_family=AF_INET;
addr->sin_port = htons ((u_short) port);
addr->sin_addr.s_addr=ip;
}

main(int argc, char **argv) {
int i,sd;
int var1,var2,var3,var4;
int sock_size=sizeof(struct sockaddr_in);
int N,status;
pid_t pid;
struct sockaddr_in server,client;

// Controllo che vengano passati almeno due argomenti
if (argc<3) {
printf ("%s <server> <msg>\n",argv[0]);
exit(1);
}

// Controllo che l'IP del server passato sia un indirizzo IPv4 valido
if (sscanf(argv[1],"%d.%d.%d.%d",&var1,&var2,&var3,&var4) != 4) {
printf ("%s non è un indirizzo IPv4 valido\n",argv[1]);
exit(2);
}

// Inizializzazione dell'indirizzo
addr_init (&server,PORT,inet_addr(argv[1]));

// Creazione del socket
if ((sd=socket(AF_INET,SOCK_STREAM,0))<0) {
printf ("Impossibile creare un socket TCP/IP\n");
exit(3);
}

// Creazione della connessione
if (connect(sd, (struct sockaddr*) &server, sock_size)<0) {
printf ("Impossibile collegarsi al server %s sulla porta %d: errore %d\n",
inet_ntoa(server.sin_addr.s_addr),PORT,errno);
exit(4);
}

printf ("Connessione stabilita con successo con il server %s sulla porta %d\n",
inet_ntoa(server.sin_addr.s_addr), ntohs(server.sin_port));

// Il numero di parole contenute nel messaggio è pari ad argc-2,
// ovvero argc-(nome del programma)-(IP del server)
N=argc-2;

// Dico al server che sto per inviargli N stringhe
send (sd, (int*) &N, sizeof(int), 0);

// Per i che va da i ad argc...
for (i=2; i<argc; i++) {
// ...N è la lunghezza dell'i-esima stringa
N=strlen(argv[i]);

// Dico al server che sto per inviargli una stringa lunga N caratteri
send (sd,(int*)&N,sizeof(int),0);

// Invio al server la stringa
send (sd,argv[i],N,0);
printf ("Stringa %s lunga %d caratteri inviata con successo al server %s\n",
argv[i],N,inet_ntoa(server.sin_addr.s_addr));
}

// Chiusura della connessione
close(sd);
exit(0);
}



se sapete postarmi un semplice esempio, grazie

variabilepippo
21-01-2008, 22:00
volevo compilare un esempio di clinet-server trovato su internet (ne ho provati molti, ma ancora nessuno che funzioni).


Forse perché scarichi sorgenti non pensati per il tuo compilatore? :)

Secondo me ha poco senso cercare di imparare qualcosa da codice trovato in giro per la Rete, soprattutto quando la preparazione è ancora lacunosa.

In ogni caso quel codice compila senza problemi su CygWin.

$te
21-01-2008, 22:03
mi sono leto la teoria sui sockets, e ora volevo semplicemente un esempio pratico per imparare.
Comunque ho trovato dei sorgenti compilati! quindi problema risolto!

cionci
22-01-2008, 01:49
mi sono leto la teoria sui sockets, e ora volevo semplicemente un esempio pratico per imparare.
Leggiti le librerie da includere e da linkare su Windows per usare i socket ;)
Dovrebbe funzionare cambiando semplicemente gli header.