[MFC] 소켓 생성하고 연결하기

당근한박스·2025년 1월 14일
0

C++

목록 보기
23/23

winsock 초기화

  • MAKEWORD(2, 2) : winsock 2.2 버전 사용
  • WSAStartup : winsock 라이브러리 초기화
	WSADATA data;
	WORD version = MAKEWORD(2, 2);
	int wsOk = WSAStartup(version, &data); 
	if (wsOk != 0) { // 0 리턴하지 않으면 초기화 실패
		std::cerr << "Can't initialize Winsock! Quitting" << std::endl;
		return;
	}

소켓 생성

  • AF_INET : IPv4 주소 체계 사용
  • SOCK_STREAM : TCP 소켓 생성 (SOCK_DGRAM->UDP)
  • 0 : 기본 프로토콜 사용 (여기선 TCP)
	clientSocket = NULL;
	clientSocket = socket(AF_INET, SOCK_STREAM, 0);
	if (clientSocket == INVALID_SOCKET) {  // 소켓 생성 실패 시 종료
		std::cerr << "Can't create socket! Quitting" << std::endl;
		return;
	}

서버 주소 설정

  • sockaddr_in 구조체 :
    - sin_family : 주소 체계 (IPv4)
    - sin_port : 연결할 서버 포트 지정. htons는 네트워크 바이트 순서로 변환
    - sin_addr : 서버 IP주소를 설정. inet_pton은 문자열 IP주소를 이진 데이터로 변환
	sockaddr_in serverAddr;
	serverAddr.sin_family = AF_INET;
	serverAddr.sin_port = htons(port); // 서버 포트
	inet_pton(AF_INET, ip, &serverAddr.sin_addr); // 서버 IP

서버에 연결

  • connect 함수 : 지정된 IP와 포트로 서버에 연결 시도
  • 연결 실패 시 소켓 닫고 winsock 정리(WSACleanup)
	int connResult = connect(clientSocket, (sockaddr*)&serverAddr, sizeof(serverAddr));
	if (connResult == SOCKET_ERROR) {
		std::cerr << "Can't connect to server! Quitting" << std::endl;
		closesocket(clientSocket);
		WSACleanup();
		return;
	}

0개의 댓글