~ネットワーク(WinSock)プログラミングの第一歩~
まずは自分のPCのソケットバージョンを調べる基礎プログラムです。
WinSockを使う為には「WSock32.lib」を追加しなければいけません。
Visual studio 2008なら
プロジェクト(P) -> ○○のプロパティ...(P) > 構成プロパティ > リンカ > 入力 > 追加の依存ファイル
に「WSock32.lib」を追加しましょう。
もしくは「#pragma comment(lib, "Ws2_32.lib");」をプログラムの先頭に書く事で追加されます。
// winsock2.hを使用する場合、これを書くとコンパイルが早くなる
// また、windows.hと定義が重複しているので#defineを行わないと二重定義となります
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <conio.h>
#include <winsock2.h> // ソケットを利用する為のヘッダー
#pragma comment(lib, "Ws2_32.lib"); // WinSockを使用する為
void main()
{
WSADATA WsaData; // ソケットに関する情報を格納する
int nRtn; // エラー用
// WinSock(ソケット)の初期化
nRtn = WSAStartup(MAKEWORD(1, 1), &WsaData);
if(nRtn != 0) // エラーチェック
{
fprintf(stderr, "WSAStartup失敗\n");
getch();
}
// 呼び出し元が使用すると期待されるWinSockのバージョン
printf("wVersion = %d.%d\n", LOBYTE(WsaData.wVersion), HIBYTE(WsaData.wVersion));
// このdllがサポートしている最新のバージョン
printf("wVersion = %d.%d\n", LOBYTE(WsaData.wHighVersion), HIBYTE(WsaData.wHighVersion));
// このdllの説明テキストが格納
printf("szDescription = %s\n", WsaData.szDescription);
// このdllの現在の状態などを説明するテキストが格納
printf("szSystemStatus = %s\n", WsaData.szSystemStatus);
// 利用できるソケットの最大数
printf("iMaxSockets = %d\n", WsaData.iMaxSockets);
// WinSock1.1の場合、UDPデータグラムで送受信出来る最大バイト数
printf("iMaxUdpDg = %d\n", WsaData.iMaxUdpDg);
printf("WSAStartup成功\n");
// Winsockのリソースを開放する
nRtn = WSACleanup();
if(nRtn == SOCKET_ERROR) // エラーチェック
{
fprintf(stderr, "WSACleanup失敗\n");
getch();
}
printf("WSACleanup成功\n");
getch();
}
詳細説明
int WsaStertup(WORD wVersionRequested, LPWSADATA lpWSAData)
WinSock(ソケット)を初期化する関数です。
第一引数 |
使いたいソケットのバージョンを指定する 上位バイトにはマイナーバージョン 下位バージョンにはメジャーバージョン この指定にはMAKEWORDマクロが便利 |
第二引数 |
WSADATAのポインタ |
成功すると「0」が返ってきます。
それ以外は以下のエラーコードが返ってきます。
エラーコード |
意味 |
WSASYSNOTREADY |
ネットワークサブシステムの準備が整ってない |
WSAVERNOTSUPPORTED |
要求されているソケットのバージョンが対応していない |
WSAEINNPROGRESS |
ブロッキングが既にされている |
WSAEPROCLIM |
ソケットが処理出来るタスクの限界に達した |
WSAEFAULT |
lpWSADataが有効なポインタでない |
WORD MAKEWORD(BYTE bLow, BYTE bHigh)
2つの引数から1つのWORDを作成する。
int WSACleanup(void)
Winsockのリソースを開放する。
成功すると「0」が返ってきます。
そうでない時は「SOCKET_ERROR」が返ってきます。
どんなエラーが返ってきたのか知りたい時はWSAGetLastErrorを呼び出して下さい。
int WSAGetLastError(void)
最後に発生したエラーステータスを返します。
最終更新:2011年06月17日 02:38