web-dev-qa-db-fra.com

Utilisation des fonctions sys / socket.h sur Windows

J'essaie d'utiliser les fonctions socket.h dans Windows. Essentiellement, je regarde actuellement l'exemple de code à https://beej.us/guide/bgnet/html/multi/clientserver.html#datagram . Je comprends que socket.h est une fonction Unix - est-ce que je peux facilement émuler cet environnement lors de la compilation de cet exemple de code? Un autre IDE/compilateur change-t-il quelque chose?

Sinon, j'imagine que j'ai besoin d'utiliser un environnement Linux virtualisé, ce qui peut être le meilleur de toute façon car le code s'exécutera très probablement dans un environnement UNIX.

Merci.

27
BSchlinker

Vous avez deux options:

  1. Utilisez Cygwin (bibliothèque d'émulation Unix).
  2. Port à ( Winsock (bibliothèque standard de Windows).

Cygwin: vous permet de compiler vos sources Unix pour la plupart intactes, mais vous lie à la bibliothèque d'émulation Cygwin. Cela a deux implications: les performances générales - pas uniquement de réseau - seront probablement moins qu'optimales; et l'environnement cible doit avoir (au moment de l'exécution) le Cygwin DLL installé).

Winsock: cela vous oblige à remplacer sys/socket.h (Bibliothèque de sockets BSD, standard UNIX pour la pile TCP/IP) avec winsock2.h, et réécrire certaines parties du code - pas beaucoup, mais certaines.

Quelques questions connexes avec des informations précieuses:

Différences entre les implémentations de socket Winsock et BSD

Quelques problèmes à propos de Cygwin [Linux sous Windows] (socket, thread, autres problèmes de programmation et shell)

Exemples pour Winsock?

37
leonbloy

L'écriture d'applications réseau multiplateforme n'est pas facile avec ce que la norme BSD vous offre. Bien sûr, cela fonctionnera, mais vous devrez faire des remplacements, comme remplacer ioctl (si nécessaire) par ioctlsocket (sous Windows). Plus de différences ici .

Mon conseil est d'utiliser une bibliothèque qui cache ces vilaines différences et offre une manière unifiée de communiquer. J'utilise personnellement ACE . Vous disposez de nombreux exemples qui vous montrent comment créer un serveur et un client. Copiez à partir des exemples et voyez comment ils y procèdent. Leurs listes de diffusion sont également d'une grande aide (n'oubliez pas d'utiliser le PRF - voir l'arborescence source pour le formulaire de rapport de problème). Vous pouvez emprunter les livres pour plus d'informations. Remarque importante: en utilisant ace, vous pouvez utiliser les fonctions d'encapsulation ACE comme socket, setsockopt, ioctl etc. sans vous soucier du fait qu'elles ne fonctionneront pas. Malheureusement, cela ajoute une dépendance à la bibliothèque qui n'est pas toujours une option. Mais ACE a des fonctionnalités plus puissantes que vous apprécierez certainement une fois que vous les aurez découvertes. Astuces: Reactor, Proactor.

1
INS

Je pense que vous recherchez une bibliothèque Winsock .

0
Nikolai Fetissov