2010-08-02 2 views

Répondre

1

Je viens de citer here.

Changement:

#include <winsock.h> 

Pour:

#include <winsock2.h> 

ne fait aucune différence autre que capable d'utiliser les winsock2 appels spécifiques. Vous pouvez être utilisant effectivement winsock2 même si vous n'incluez que winsock.h. La différence réelle est faite si vous liez à wsock32.lib (winsock 1.1) ou ws2_32.lib (winsock 2.2). Comme je l'ai souligné, vous devez l'utiliser. Simplement en changeant les fichiers d'en-tête ou le lib où vous êtes lié ne fait pas toute sorte de différence de performance, l'efficacité, peu importe. En fait vous pouvez la compatibilité avec l'os prend en charge les appels socket BSD pur lorsque passage à ws2 tout en ne l'utilisant pas.

Winsock2 est venu pour performace. L'E/S est géré par Windows kernal (comme chevauché par exemple). Tous vos Winsock 1.1 telles que l'envoi/recv de base appels sont directement mis en correspondance avec la Winsock 2.2 contrepartie (WSASend/WSARecv) .winsock2 est purement compatibe vers le bas avec winsock.

1

Bizarrement oui, il semble qu'il n'utilise que 1.1.

Vous devriez avoir le code source avec votre installation VS - vous verrez dans stdafx.h il inclut winsock.h (pas 2) et dans sockcore.cpp il y a du code pour initialiser 1.1. Le MFC de VS2010 est le même. Si vous voulez utiliser winsock2 dans votre propre code, vous devrez inclure l'en-tête avant l'en-tête MFC dans le fichier stdafx.h de votre projet afin que les déclarations ne s'affrontent pas. Espérons que cela ne va pas rompre l'interface AfxSocket si: -/

+0

Merci pour la brève explication Rup. –

Questions connexes