ウィンドウソケットの初期化と終了
3224 ワード
(2-3図)
上の図は、すべてのWinにおけるアプリケーションの汎用構造を示しています.クラウドでの初期化と終了方法について説明します.
すべてのWinのプログラムはソケット関数を呼び出す前に、Winの初期化関数wVersionResquested:プログラム要求の最高のウィンウィンバージョンです.サブ8ビットにプライマリ・バージョン、上位8ビットにセカンダリ・バージョンを追加します.例えば、クラウドに3.2版の転記を要求する場合は、 lpWSADA:
実装Winに関する情報を含むことができる構造体として、初期化関数内部でWinにおける属性情報として設定される.
実際のネットワークプログラミングで使用する必要はありませんが、サブバージョンと互換性を保つために保持されます.wVersion:クイックバージョン wHighVersion:使用可能な親バージョンがwVersionと一致 iMaxSockets:最大スロット数 iMaxUdpDg:データ報知メッセージの最大サイズ lpVendorInfo:仕入先情報 szDescription[WADESCRIPTION LEN+1:ウィンウィンの実現についての説明 szSystemStatuspWSASYS STATUS LEN+1:関連状態または構成情報
たとえば、IPv 6はWindows XPSP 1以降でのみ使用でき、BluetoothはWindows XPSP 2以降でのみ使用できます.
複数回呼び出せる
例えば、MFCソケットクラスではWinの1.1バージョンのみがサポートされているが、Winの2.2バージョンを使用するために、
プログラムを終了する場合はWinの終了関数を呼び出すべき
関数呼び出しに失敗した場合は、
上記の内容を使用してWinを初期化および終了する簡単なコンソールアプリケーションを以下に示します.
(2-4図)
参考資料
金成祐著、「TCP/IPウィンドウソケットプログラミング」、星光学院、2018
上の図は、すべてのWinにおけるアプリケーションの汎用構造を示しています.クラウドでの初期化と終了方法について説明します.
WSAStartup
すべてのWinのプログラムはソケット関数を呼び出す前に、Winの初期化関数
WSAStartup()
を呼び出さなければなりません.WSAStartup()
関数はリクエストプログラムで使用されるウィンウィンバージョンにより、ウィンウィンライブラリを初期化する役割を果たす(ws2_32.DLL
).WSAStartup()
関数が失敗した場合、ws2_32.DLL
メモリにロードされません.この場合、WSAGetLastError()
関数が返すエラーコードが正しくないため、WSAStartup()
関数はエラーコードを返すように設計されている.// 성공: 0, 실패: 오류코드
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
);
0x0203
またはMAKEWORD(3, 2)
WSADATA
構造体が入手可能なウィンドウから提供されるウィンウィンの実現に関する情報(アプリケーションが実際に使用するウィンウィンバージョン、システムがサポートするウィンウィントップバージョンなど)を伝達する.しかし、アプリケーションはこれらの情報を使用する必要はほとんどありません.WSADATA
実装Winに関する情報を含むことができる構造体として、初期化関数内部でWinにおける属性情報として設定される.
実際のネットワークプログラミングで使用する必要はありませんが、サブバージョンと互換性を保つために保持されます.
WSADATA
構造体はwinsock.h
で確認でき、定義は以下の通り.typedef struct WSAData
{
WORD wVersion;
WORD wHighVersion;
unsigned short iMaxSockets;
unsigned short iMaxUdpDg;
char *lpVendorInfo;
char szDescription[WSADESCRIPTION_LEN + 1];
char szSystemStatus[WSASYS_STATUS_LEN + 1];
} WSADATA;
WSAstartup()関数を使用する際の注意点
WSAStartup()
関数を呼び出す場合、同一のウィンウィンバージョンを要求しても、実際に利用可能なプロトコルはオペレーティングシステムによって異なるので注意が必要です.たとえば、IPv 6はWindows XPSP 1以降でのみ使用でき、BluetoothはWindows XPSP 2以降でのみ使用できます.
複数回呼び出せる
WSAStartup()
関数例えば、MFCソケットクラスではWinの1.1バージョンのみがサポートされているが、Winの2.2バージョンを使用するために、
WSAStartup()
関数を再度呼び出すことができる.ただし、WSAStartup()
関数を呼び出す回数だけで、SWACleanup()
関数を呼び出す必要があります.WSACleanup
プログラムを終了する場合はWinの終了関数を呼び出すべき
WSACleanup()
WSACleanup()
関数の役割は、Wineの使用停止をオペレーティングシステムに知らせ、関連リソースを返すことである.関数呼び出しに失敗した場合は、
WSAGetLastError()
関数を呼び出して具体的なエラーコードを得ることができます.// 성공: 0, 실패: SOCKET_ERROR
int WSACleanup(void);
補間間での初期化と終了
上記の内容を使用してWinを初期化および終了する簡単なコンソールアプリケーションを以下に示します.
#pragma comment(lib, "ws2_32")
#include <winsock2.h>
int main(int argc, char *argv[])
{
// 윈속 초기화
WSADATA wsa;
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
return 1;
MessageBox(NULL, "윈속 초기화 성공", "알림", MB_OK);
// 윈속 종료
WSACleanup();
return 0;
}
コンパイル、リンク後の実行結果は次のとおりです.(2-4図)
参考資料
金成祐著、「TCP/IPウィンドウソケットプログラミング」、星光学院、2018
Reference
この問題について(ウィンドウソケットの初期化と終了), 我々は、より多くの情報をここで見つけました https://velog.io/@octo__/윈도우-소켓-초기화와-종료テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol