Windowsネットワークプログラミングの基礎知識
3177 ワード
1.WinSockの初期化
2.エラーチェックと処理
3.
sin_familyはAF_でなければなりませんINETは、WinSockがIPアドレス族sinを使用していることを知らせる役割を果たす.zero[8]SOCKADDR_INとSOCKADDRの構造長は同じである.SOCKADDRは、void*に相当する汎用ソケットアドレスです.
バイトソートの異なるコンピュータプロセッサはbig-endianまたはlittle-endian形式で符号化される場合があります.Internetネットワーク規格は、マルチバイト値をbig-endian形式で表す必要があることを指定し、一般的にネットワークバイト順と呼ぶ.次の4つの共通API関数は、ホストバイト順からネットワークバイト順に1つの数を変換します.
逆に
もう一つの一般的な関数は、ポイントIPアドレスを4バイト整数srvAddrに変換する.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1”);
INADDR_ANYはサーバに送信されたすべてのこのポートを表し、どのNIC/どのIPアドレスで受信したデータも、このソケット処理に渡されます.
#include<iostream>
#include<WinSock2.h>
#include<MSWSock.h>
#pragma comment(lib, "WS2_32.lib")// WinSock2.h ,
using namespace std;
//Winsock2 WSA , WSAStartup WSACleanup WSARecvEX WSAGetLastError
int main()
{
WSADATA wsData;
if (SOCKET_ERROR == WSAStartup(MAKEWORD(2, 2), &wsData))// 2
{
cout << " !" << endl;
}
cout << " :" << (int)LOBYTE(wsData.wHighVersion) << endl;//
cout << " " << (int)HIBYTE(wsData.wHighVersion) << endl;
WSACleanup();
system("pause");
return -1;
}
2.エラーチェックと処理
WSAGetLastError
WSASetLastError
3.
typedef struct sockaddr_in {
ADDRESS_FAMILY sin_family;
USHORT sin_port;
IN_ADDR sin_addr;
CHAR sin_zero[8];
} SOCKADDR_IN, *PSOCKADDR_IN;
sin_familyはAF_でなければなりませんINETは、WinSockがIPアドレス族sinを使用していることを知らせる役割を果たす.zero[8]SOCKADDR_INとSOCKADDRの構造長は同じである.SOCKADDRは、void*に相当する汎用ソケットアドレスです.
バイトソートの異なるコンピュータプロセッサはbig-endianまたはlittle-endian形式で符号化される場合があります.Internetネットワーク規格は、マルチバイト値をbig-endian形式で表す必要があることを指定し、一般的にネットワークバイト順と呼ぶ.次の4つの共通API関数は、ホストバイト順からネットワークバイト順に1つの数を変換します.
WSAHtonl//4
htonl
WSAHtons//2
htons
逆に
WSANtohl
ntohl
WSANtohs
ntohs
もう一つの一般的な関数は、ポイントIPアドレスを4バイト整数srvAddrに変換する.sin_addr.S_un.S_addr = inet_addr(“127.0.0.1”);
SOCKADDR_IN srvAddr;
srvAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
srvAddr.sin_family = AF_INET;
srvAddr.sin_port = htons(DefaultPort);
INADDR_ANYはサーバに送信されたすべてのこのポートを表し、どのNIC/どのIPアドレスで受信したデータも、このソケット処理に渡されます.