안녕하세요.. 3일째 답을 못찾아서 이리저리 떠돌고있는 중생입니다.
소스코드가 의미가 있을까 싶긴 한 질문입니다만.. connect()에서 getLastError()을 찍어보니
10051이라는 에러가 뜨더군요. 확인해본 결과 'WSAENETUNREACH, 네트워크에 도달할 수 없음'
공식문서에 이렇게 나와있더라구요. 그냥 진짜 간단한 tcp 소켓 통신인데도 전달이 안됩니다 ㅠㅠ
이곳저곳 질문하면서 혹시나 답변자님에게 키워드가 될 수 있을법한 것들을 몇개 적어놓고 코드를 올리겠습니다.
일단 집에서 공유기를 사용하고 있긴 하지만 제 컴퓨터는 LAN선을 직접 연결하여 사용중입니다.
Windows 10 사용중이고 딱히 포트포워딩이나 방화벽은 건들지 않았습니다.
그리고 집에서 노트북으로 사용했을 때도 (wi-fi 사용) connect에서 같은 에러가 뜨더군요.
참고로 지금 올리는 코드는 예전에 독서실에서 노트북으로 했을 때는 결과가 나온 코드입니다. 집에서는 안되더라구요 ㅠ
//수정
inet_pton을 사용하니 에러가 해결된듯 합니다... 왜인지 모르겠습니다..
//서버
#include "pch.h"
#include <WinSock2.h>
#include <iostream>
#pragma comment (lib , "ws2_32.lib")
#define WINSOCK_DEPERECATED_NO_WARNINGS
void showError(const char * msg)
{
std::cout << "에러 : " << msg << std::endl;
exit(-1);
}
int main()
{
WSADATA data;
::WSAStartup(MAKEWORD(2, 2), &data);
SOCKET server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (server == INVALID_SOCKET)
showError("서버 생성 실패");
sockaddr_in addr = { 0 };
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY);
addr.sin_port = htons(23000);
if (bind(server, (sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR)
showError("바인딩 실패");
if (listen(server, SOMAXCONN) == SOCKET_ERROR)
showError("듣기 실패");
std::cout << "클라이언트를 기다립니다.." << std::endl;
SOCKET client = accept(server, NULL, NULL);
closesocket(client);
closesocket(server);
::WSACleanup();
return 0;
}
// 클라이언트
#include "pch.h"
#include <WinSock2.h>
#include <iostream>
#pragma comment (lib , "ws2_32.lib")
void showError(const char * msg)
{
std::cout << "에러 : " << msg << ", " << GetLastError() << std::endl;
exit(-1);
}
int main()
{
WSADATA data;
::WSAStartup(MAKEWORD(2, 2), &data);
SOCKET client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (client == INVALID_SOCKET)
showError("클라이언트 생성 실패");
sockaddr_in addr = { 0 };
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(atoi("127.0.0.1"));
addr.sin_port = htons(23000);
if (connect(client, (sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR)
showError("연결 실패");
closesocket(client);
::WSACleanup();
return 0;
}