Socket C : typedef int SOCKET
Bien le bonjour :)
J'ai commencé à programmer des sockets en C il y a peu de temps et j'ai 2-3 points que j'aimerais éclaircir.
* Tout d'abord, les sockets sous Windows sont déclarés comme suit :
SOCKET sock;
tandis que sur Unix, si j'ai bien compris, on utilisait le format int :
int sock;
Etant donné que dans le header winsock2 on a typedef int SOCKET, peut-on utiliser int à la place de SOCKET dans une application Windows ?
* Ma seconde question concerne les infos clients. Sur le programme serveur que j'ai réalisé, j'ai créé une SOCKADDR_IN Sin2; pour stocker les infos clients. Je pense qu'en utilisant la fonction getpeername();, je peux stocker les données clients dans Sin2, non ? Dans ce cas, comment puis-je par exemple afficher l'adresse IP de la machine qui se connecte ? Faut-il convertir Sin2.sin_addr.s_addr avant de l'afficher ?
* Enfin, je me demande si un client peut autant envoyer que recevoir, pareil pour le serveur. Ont-ils chacun besoin d'une partie serveur et client ou bien une seule suffit-elle ?
Merci de me répondre,
Fred
Re: Socket C : typedef int SOCKET
Citation:
Envoyé par Freed0
J'ai commencé à programmer des sockets en C il y a peu de temps et j'ai 2-3 points que j'aimerais éclaircir.
* Tout d'abord, les sockets sous Windows sont déclarés comme suit :
SOCKET sock;
tandis que sur Unix, si j'ai bien compris, on utilisait le format int :
int sock;
Etant donné que dans le header winsock2 on a typedef int SOCKET, peut-on utiliser int à la place de SOCKET dans une application Windows ?
Je conseille de laisser SOCKET et de créer un petit fichier d'entête assurant la portabilité (Portable SOCKet)
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
/* psock.h */
#ifndef H_PSOCK
#define H_PSOCK
#ifdef WIN32
#include <winsock2.h>
#else
/* inclure ce qu'il faut pour unixoide... */
typedef int SOCKET;
/* etc. Par exemple... */
#define closesocket(a) close(a)
#endif
#endif /* guard */ |
Citation:
Faut-il convertir Sin2.sin_addr.s_addr avant de l'afficher ?
Oui. http://www.linux-kheops.com/doc/man/manfr/man-ascii-0.9/man3/inet_addr.3.txt.html
Citation:
* Enfin, je me demande si un client peut autant envoyer que recevoir,
Ben oui... Client / serveur, ça veut pas dire émetteur / recepteur... Chaque client emet et reçoit. Pareil pour un serveur. Ce qui change c'est la manière de fonctionner, qui est liée à l'architecture du réseau :
Code:
1 2 3 4
|
Client --------requete------->Serveur
Client <-------reponse-------Serveur |