関数createServerSocket()があります。この関数は、ソケットを作成するために複数のスレッドからアクセスできます。
各スレッドが 3 つの引数、socketIdentifier、 *sockaddr_in* 、および特定のポート番号をcreaterServerSocket()関数に渡して、各スレッドが一意のソケットを持つようにします。
このために、socketIdentifier、 *sockaddr_in* 、および特定のポート番号をポインターとして createrServerSocket() 関数に渡し、作成された socketIdentifier とソケットがスレッド内でアクセス可能でなければなりません。
以下は私のコードスニペットです:
VOID createServerSocket(SOCKADDR_IN *socket, SOCKET *socketIdentifier, int PORT)
{
//Socket Binding//
WSADATA wsa;
//Initialise winsock//
if (WSAStartup(MAKEWORD(2,2),&wsa) != 0)
{
exit(EXIT_FAILURE);
}
//Create a socket//
if((*socketIdentifier = socket(AF_INET , SOCK_DGRAM , 0 )) == INVALID_SOCKET)
{
MessageBox(NULL,
"Socket not Created",
"Failure :(",
MB_ICONINFORMATION);
exit(EXIT_FAILURE);
}
//Socket Created//
//Prepare the sockaddr_in structure//
*socket.sin_family = AF_INET;
*socket.sin_addr.s_addr = INADDR_ANY;
*socket.sin_port = htons( PORT );
//Bind//
if( bind(socketIdentifier ,(struct sockaddr *)&socket , sizeof(socket)) == SOCKET_ERROR)
{
MessageBox(NULL,
"Bind Failed",
"Failure :(",
MB_ICONINFORMATION);
exit(EXIT_FAILURE);
}
//Else Bind Done//
MessageBox(NULL,
"Bind Done",
"SUCCESS :)",
MB_ICONINFORMATION);
}
呼び出し関数は次のとおりです。
DWORD WINAPI threadProc(LPVOID param)
{
SOCKADDR_IN socket;
SOCKET socketIdentifier;
createServerSocket(*socket,*socketIdentifier,8888); //Create a socket with a socketIdentifier and bind()ed to PORT#8888.
//Do something at this socket
Return TRUE;
}
これらは私が得るエラーです:
エラー C2064: 項は 3 つの引数を取る関数として評価されません
エラー C2228: '.sin_family' の左側にはクラス/構造体/共用体が必要です エラー C2228: '.sin_addr' の左側にはクラス/構造体/共用体が必要です
エラー C2228: 左側'.S_un' にはクラス/構造体/共用体
エラー C2228 が必要です: '.S_addr' の左側にはクラス/構造体/共用体エラーが必要です C2228: '.sin_port' の左側にはクラス/構造体/共用体
エラーが必要です C2070: ''unknown- type'': オペランドのサイズが不正です
行: if((*socketIdentifier = socket(AF_INET , SOCK_DGRAM , 0 )) == INVALID_SOCKET)
エラー: エラー C2064: 項は 3 つの引数を取る関数として評価されません