2

私は Visual Studio の初心者です。MFC が wi​​nsock1 のみをサポートする場所をいくつか読みました。MFC が wi​​nsock2 をサポートしていないというのは本当ですか?

4

2 に答える 2

1

奇妙なことに、1.1 しか使用していないようです。

VS のインストールにはソース コードが必要です。stdafx.h には winsock.h (2 ではない) が含まれており、sockcore.cpp には 1.1 を初期化するコードがあります。VS2010 の MFC は同じです。

独自のコードで winsock2 を使用する場合は、宣言が衝突しないように、プロジェクトの stdafx.h で MFC ヘッダーの前にヘッダーを含める必要があります。うまくいけば、それはAfxSocketインターフェースを壊さないでしょう:-/

于 2010-08-02T11:16:27.983 に答える
1

hereから引用しています。

変化:

#include <winsock.h>

に:

#include <winsock2.h>

winsock2 固有の呼び出しを使用できる以外に違いはありません。winsock.h だけをインクルードしている場合でも、実際には winsock2 を使用している可能性があります。wsock32.lib (winsock 1.1) または ws2_32.lib (winsock 2.2) にリンクしているかどうかで、実際の違いが生じます。私が指摘したように、あなたはそれを使用しなければなりません。リンクされているヘッダーファイルまたはライブラリを変更するだけでは、パフォーマンスや効率などに何の違いもありません。実際、使用していない状態で ws2 に変更すると、純粋な BSD ソケット呼び出しをサポートする OS との互換性が失われる可能性があります。

Winsock2 はパフォーマンスのために登場しました。IO は Windows カーネルによって管理されます (たとえば、重複した io など)。基本的な送信/受信呼び出しなどのすべての winsock 1.1 は、対応する winsock 2.2 (WSASend/WSARecv) に直接マップされます。winsock2 は、winsock と完全に下位互換です。

于 2010-08-02T11:28:59.893 に答える