我有一個函數createServerSocket()。這個函數可以被多個線程訪問來創建它們的套接字。在函數中傳遞指向SOCKADDR_IN和SOCKET的指針
我想每個線程傳遞三個參數,一個socketIdentifier,* SOCKADDR_IN *和具體端口號到createrServerSocket()功能,使每個線程都有一個唯一的插座。
對於這一點,我傳遞socketIdentifier,* SOCKADDR_IN *和具體端口號到createrServerSocket()函數的指針,這樣socketIdentifier創造必須是accessable內螺紋插座。
下面是我的代碼片段:
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;
}
這是我得到的錯誤:
error C2064: term does not evaluate to a function taking 3 arguments
error C2228: left of '.sin_family' must have class/struct/union error C2228: left of '.sin_addr' must have class/struct/union
error C2228: left of '.S_un' must have class/struct/union
error C2228: left of '.S_addr' must have class/struct/union error C2228: left of '.sin_port' must have class/struct/union
error C2070: ''unknown-type'': illegal sizeof operand
線: 如果((* socketIdentifier = socket(AF_INET,SO CK_DGRAM,0))== INVALID_SOCKET)
錯誤: 錯誤C2064:術語不計算爲服用3個參數功能
非常感謝。問題的所有其餘的都解決了,除了 行:if((* socketIdentifier =插座(AF_INET,SOCK_DGRAM,0))== INVALID_SOCKET) 錯誤:錯誤C2064:術語不計算爲服用3個參數 – Ayse 2013-05-03 05:55:04
功能@ AyeshaHassan這是因爲你已經有了一個名爲'socket'的局部變量(參數)。重命名該變量並且可以調用該函數。 – 2013-05-03 05:56:20
非常感謝。問題解決了 :) – Ayse 2013-05-03 05:59:56