這裏是Main.cpp的最多到錯誤發生的點:爲什麼我在這段代碼中遇到WSAENOTSOCK錯誤?
int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nShowCmd)
{
if(SUCCEEDED(CoInitialize(NULL)))
{
{
Game game;
game.CreateRessources(hInst);
game.ShowMainScreen();
game.pWinsock->Initialize(game.Getm_hWnd());
game.Getm_hWnd返回私人HWND m_hWnd。
這裏是遊戲:: CreateRessources(HINSTANCE):
void Game::CreateRessources(HINSTANCE hInst)
{
m_hWnd=CreateWindowClass(hInst);
pMessageLog=CreateMessageLog();
pD2DResources=CreateD2DResources(m_hWnd);
pWinsock=CreateWinsock();
}
有CreateWinsock():
Winsock* CreateWinsock()
{
Winsock* pWinsock=new Winsock;
return pWinsock;
}
的Winsock :: Winsock的:
的Winsock :: Winsock的( ):Socket(NULL){}
最後,Winsock的初始化::(HWND):
void Winsock::Initialize(HWND hwnd)
{
WSADATA wsaDat;
SendMessage(hwnd, LOG_ADD, NULL, (LPARAM)L"Initializing winsock... ");
int nResult = WSAStartup(MAKEWORD(2,2),&wsaDat);
if(nResult!=0)
{
MessageBox(NULL,"Winsock initialization failed","Critical error",MB_ICONERROR);
SendMessage(hwnd,WM_DESTROY,NULL,NULL);
}
SendMessage(hwnd, LOG_ADD, NULL, (LPARAM)L"Done!\nCreating a socket... ");
Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(Socket==INVALID_SOCKET)
{
MessageBox(NULL,"Socket Creation failed","Critical error",MB_ICONERROR);
SendMessage(hwnd,WM_DESTROY,NULL,NULL);
}
SendMessage(hwnd, LOG_ADD, NULL, (LPARAM)L"Done!\nRequesting Windows message-based notification of network events... ");
nResult=WSAAsyncSelect(Socket,hwnd,WM_SOCKET,(FD_CLOSE|FD_READ));
if(nResult)
{
if(WSAGetLastError()==WSAENOTSOCK)
MessageBox(hwnd,"WSAENOTSOCK Error!","Error",NULL);
MessageBox(NULL,"WSAAsyncSelect failed","Critical error",MB_ICONERROR);
SendMessage(hwnd,WM_DESTROY,NULL,NULL);
}
/* More code */
}
如果(WSAGetLastError()== WSAENOTSOCK)返回true線。 WSAENOTSOCK意味着:。上nonsocket
「套接字操作嘗試 一個操作上的東西,不是一個套接字可能是套接字句柄參數沒有引用有效的套接字,或者選擇中,FD_SET中的成員無效。」
編輯:還有就是我的Winsock類:
class Winsock{
public:
Winsock();
void Initialize(HWND);
void ReceiveMsg();
private:
SOCKET Socket;
static const char* server;
static const int port;
};
據我所知,Socket是一個插座,和一個有效的。我怎麼會收到這個錯誤呢?
'SendMessage'是你的一個函數嗎?在winsock API中找不到它,只有'send'。 – us2012 2013-03-17 18:36:58
這是一個WinAPI函數。它發送一條消息給WinProc。 – 2013-03-17 18:38:36
當你到達'WSAAsyncSelect'時,你確定沒有在'WndProc'中的某個地方關閉套接字嗎? – 2013-03-17 19:59:28