NetAddress를 추가함.
#pragma once
class NetAddress
{
public:
NetAddress(string ip, int port);
NetAddress(const NetAddress& addr);
~NetAddress();
const SOCKADDR_IN& GetAddr() { return _sockAddr; }
string GetIp();
int16 GetPort() { return ::ntohs(_sockAddr.sin_port); }
private:
SOCKADDR_IN _sockAddr;
};
#include "pch.h"
#include "NetAddress.h"
#include <ws2tcpip.h>
NetAddress::NetAddress(string ip, int port)
{
::memset(&_sockAddr, 0, sizeof(_sockAddr));
_sockAddr.sin_family = AF_INET;
::inet_pton(AF_INET, ip.c_str(), &_sockAddr.sin_addr);
_sockAddr.sin_port = ::htons(port);
}
NetAddress::NetAddress(const NetAddress& addr)
{
_sockAddr = addr._sockAddr;
}
NetAddress::~NetAddress()
{
}
string NetAddress::GetIp()
{
char buff[INET_ADDRSTRLEN];
return ::inet_ntop(AF_INET, &_sockAddr.sin_addr, buff, sizeof(buff));
}
inet_pton
ws2tcpip.h 에 있다
"127.0.0.1" 과 같이 문자열로 된 ip주소를 네트워크가 이해할 수 있는 형태로 바꿔주는 함수.
INT WSAAPI inet_pton(
[in] INT Family,
[in] PCSTR pszAddrString,
[out] PVOID pAddrBuf
);
- 성공하면 1 반환하고 pAddrBuf에 이진 숫자 ip주소를 넣어준다.
- 실패 시 -1 반환. 오류 정보는 WSAGetLastError로 확인 가능.
inet_ntop
ws2tcpip.h 에 있다
반대로 네트워크가 이해할 수 있는 형태의 ip주소를 사람이 이해할 수 있는 형태로 바꿔주는 함수.
ip주소 문자열이 들어갈 버퍼를 준비해서 넣어줘야한다.
PCSTR WSAAPI inet_ntop(
[in] INT Family,
[in] const VOID *pAddr,
[out] PSTR pStringBuf,
[in] size_t StringBufSize
);
- 성공하면 3번째 인자로 넣은 포인터가 그대로 반환된다.
- 실패하면 NULL이 반환된다. 오류 정보는 WSAGetLastError로 확인 가능.
현재까지의 버전.
Fix: NetAddress 정상화 · Dodontak/Project_Island_GameServer@bcc28f1
- NetAddress GameServer 에서 사용해볼 수 있도록 수정함.
github.com
'프로젝트 > Project_Island' 카테고리의 다른 글
| 28. Send, Broadcast 구현 (0) | 2026.03.29 |
|---|---|
| 27. IOCP accept, recv까지 구현 (0) | 2026.03.28 |
| 25. SocketUtils (0) | 2026.03.26 |
| 24. 환경설정 (0) | 2026.03.25 |
| 23. 게임서버 만들기의 시작 (0) | 2026.03.24 |