send 함수 실행시 10038 에러가 뜨면서 디버깅 오류 질문 드립니다.
글쓴이: ehaakdl / 작성시간: 토, 2016/04/23 - 4:33오후
10038에러에 대해 조사를 해봣는데
윈도우 소켓 설명 : 버클리와 같다. 이 소켓 파라미터 값이 유효한 소켓 핸들이 아니다. (그리고 이것은 절대 유효하지 않다. 이것은 파일 핸들이다. (소켓 핸들이 아니다) 또는 이것은 소켓 핸들이지만 이미 닫힌 핸들이다.)
라고 설명 하더 군요
그래서 소켓 핸들을 반환 하는 함수인 SockCreate(hwnd); 문제가 있을거 같아서 제가 간단한 CS 프로그램을 만들어서 테스트 해봤는데 아무 문제가 없었습니다 그때는 send recv 통신 다됬구요. 그리고 제가 올린 소스에서도 서버랑 연결까지는 됬습니다. 도대체 send 자체에 들어가는 매개변수를 봐서는 다 정상적인거 같은데 왜 그럴가요?
LRESULT CALLBACK WndLoginProc(HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam) { HWND hIdEdt, hPwEdt, hLoginbttn; HDC hdc = NULL; SOCKET hSock = NULL; PAINTSTRUCT ps; CMNICTHDR LoginInfo; switch (iMsg) { case WM_CREATE: hSock = SockCreate(hwnd); hIdEdt = CreateWindow(_T("edit"), NULL, WS_VISIBLE | WS_CHILD | WS_BORDER, IDZENX, IDZENY, IDX, IDY, hwnd, (HMENU)ID_ID, NULL, NULL); //길이제한 EM_LINELENGTH hPwEdt = CreateWindow(_T("edit"), NULL, WS_VISIBLE | ES_PASSWORD | WS_CHILD | WS_BORDER, PWZENX, PWZENY, PWX, PWY, hwnd, (HMENU)ID_PW, NULL, NULL); hLoginbttn = CreateWindow(_T("button"), _T("로그인"), WS_VISIBLE | WS_CHILD | WS_BORDER, LOGINBUTTONZENX, LOGINBUTTONZENY, LOGINBUTTONX, LOGINBUTTONY, hwnd, (HMENU)ID_LOGINBUTTON, NULL, NULL); break; case WM_PAINT: hdc = BeginPaint(hwnd, &ps); DrawMainBitMap(&hdc); TextOut(hdc, TPWX, TPWY, _T("비밀번호"), _tcslen(_T("비밀번호"))); TextOut(hdc, TIDX, TIDY, _T("아이디"), _tcslen(_T("아이디"))); EndPaint(hwnd, &ps); break; case WM_COMMAND: switch (LOWORD(wParam)) { case ID_LOGINBUTTON: LoginInfo.Command = 0; _tcscpy_s(LoginInfo.test,sizeof(LoginInfo.test),_T("test")); if (send(hSock, (char*)&LoginInfo, sizeof(CMNICTHDR), 0) == -1) MessageBox(0, 0, 0, 0); //문제의 근원지 break; } break; case WM_DESTROY: PostQuitMessage(0); break; } return(DefWindowProc(hwnd, iMsg, wParam, lParam)); }
Forums:
해결햇습니다.!!
해결햇습니다.!!
프로시저가 계속 호출당하면서 제가 반환해놓은 소켓번호가 리셋되더군요.. 항상 집중!!..
댓글 달기