PDA

View Full Version : [C] Utilizzo dei Socket


nico88desmo
14-02-2007, 15:41
Un saluto a tutti!

Spiego subito il mio problema.
Dovrei realizzare una chat in C utilizzando i socket; questa chat dovrà essere compatibile sia su OS Windows sia su OS Linux (precisamente la distr. Ubuntu 6.10).

Le funzioni per l'utilizzo dei socket le ho per linux...però di windows non conosco veramente nulla.

ora pongo una lista di tutte le funzioni che ho per l'utilizzo dei socket sotto linux;
le scriverò seguendo il seguente prototipo: [utilizzo] [prototipo funzione] [header]

creazione socket int socket() <sys/socket.h>
creazione socket int bind() <sys/socket.h>
connessione socket int connect() <sys/socket.h>
ascolto socket int listen() <sys/socket.h>
attesa connessione socket int accept() <sys/socket.h>
ascolto socket int select() <sys/select.h>
lettura socket ssize_t recvfrom() <sys/socket.h>
lettura socket ssize_t recv() <sys/socket.h>
lettura socket ssize_t read() <unistd.h>
scrittura socket ssize_t sendto() <sys/socket.h>
scrittura socket ssize_t send() <sys/socket.h>
scrittura socket ssize_t write() <unistd.h>
chiusura socket int close() <unistd.h>
chiusura socket int shutdown() <sys/socket.h>
lettura ind. locale socket int gestsockname() <sys/socket.h>
lettura ind. remoto socket int getpeername() <sys/socket.h>
impostazione opzioni socket int setsockopt() <sys/socket.h>
lettura opzioni socket int getsockopt() <sys/socket.h>
conversione indirizzi short int htons() <netinet/in.h>
conversione indirizzi short int ntohs() <netinet/in.h>
conversione indirizzi long int htonl() <netinet/in.h>
conversione indirizzi long int ntohl() <netinet/in.h>
conversione indirizzi int inet_aton() <arpa/inet.h>
conversione indirizzi char *inet_ntoa() <arpa/inet.h>
conversione indirizzi int inet_pton() <arpa/inet.h>
conversione indirizzi char *inet_ntop() <arpa/inet.h>
nome host int gethostname() <unistd.h>
risoluzione nomi struct hostent *gethostbyname() <netdb.h>
risoluzione nomi struct hostent *gethostbyname2() <netdb.h>
risoluzione nomi void sethostent () <netdb.h>
risoluzione nomi void endhostent () <netdb.h>
risoluzione nomi struct hostent *gethostbyaddr() <netdb.h>
nomi di servizi struct servent *getservbyname() <netdb.h>
nomi di servizi struct servent *getservbyport() <netdb.h>


detto questo..
1) utilizzare i socket sia per windows sia per linux...che problemi comporta di preciso?
2) qualcuno mi potrebbe dire quali sono le funzioni per utilizzare i socket in windows?

Grazie in anticipo a tutti!

tomminno
14-02-2007, 16:22
Tutte le funzioni che hai elencato sono presenti anche in Windows, basta usare le Winsocks2 con:


#ifdef WIN32
#include <Winsock2.h>
#endif

ilsensine
14-02-2007, 16:24
http://msdn2.microsoft.com/en-us/library/ms741394.aspx

nico88desmo
14-02-2007, 19:58
ho letto la funzione per creare un socket e c'è scritto:

Client Requires Windows Vista, Windows XP, Windows 2000 Professional, Windows NT Workstation, Windows Me, Windows 98, or Windows 95.

Server Requires Windows Server "Longhorn", Windows Server 2003, Windows 2000 Server, or Windows NT Server.

Te sai se è invece possibile usare anche client linux e server windows o viceversa?

ilsensine
15-02-2007, 13:02
Server Requires Windows Server "Longhorn", Windows Server 2003, Windows 2000 Server, or Windows NT Server.

Si riferisce alle versioni "server" di windows che supportano quella funzione credo.

Vai tranquillo.

foxmolder5
15-02-2007, 15:35
per esercitarmi nella programmazione anche a me era venuto in mente di realizzare un programma del genere.
ma il tuo prog è di tipo multi chat ( possibilità di chattare con + persone contemporaneamente) ?

nico88desmo
19-02-2007, 18:33
si...avrei in mente di fare una multi-chat...ci sono parecchi "impicci"?

foxmolder5
19-02-2007, 19:49
si...avrei in mente di fare una multi-chat...ci sono parecchi "impicci"?

ma vuoi implementare un'interfaccia grafica o tutto tramite riga di comando?

nico88desmo
19-02-2007, 20:32
inizialmente tutto tramite riga di comando...poi in base al tempo che avrò a disposizione, se riesco vorrei fare anche un'interfaccia grafica.

foxmolder5
19-02-2007, 23:01
inizialmente tutto tramite riga di comando...poi in base al tempo che avrò a disposizione, se riesco vorrei fare anche un'interfaccia grafica.

tramite riga di comando non dovrebbero esserci grandi problemi. ma in che modo vorresti strutturale il programma di chat? programma di chat centralizzato (come msn) o completamente distribuito ( ogni utente può chiamare direttamente un altro utente)?

nico88desmo
20-02-2007, 12:10
Vorrei farlo di tipo centralizzato.
questo comunque è da vedere; il programma dovrà essere funzionante per metà maggio...perchè lo porterò come tesina d'esame per giugno.