// 윈도우 기반이고 함수가 리눅스와 거의 동일함으로 예체를 치고 주석을 첨부하는 식으로 구성한다.
인터넷 주소 할당 ------------
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
void ErrorHandling(char* message);
int main(int argc, char *argv[])
{
WSADATA wsaData;
if( WSAStartup( MAKEWORK(2, 2), &wsaData ) != 0 ) -> 소켓의 버전 생성 및 wsaData 초기화
ErrorHandling( "WSAStartup() error!" );
{
char *addr = "127.212.124.78";
unsigned long conv_addr = inet_addr(addr); -> 문자열 주소를 빅에디안으로 변환된 32비트형 정수형 주소로 변환한다.
if(conv_addr == INADDR_NONE)
printf( "Error occured! \n" );
else
printf( "Network orddered integer addr : %#1x \n", conv_addr );
}
// 주소 구조체를 현재 PC에 맞춰서 주소를 넣는다.
{
struct sockaddr_in addr; -> 귀찮은 주소변환을 위해서 할당하는 구조체
char *strPtr;
char strArr[20];
addr.sin_addr.s_addr = htonl( 0x1020304 );
strPtr = inet_ntoa(addr.sin_addr);
strcpy(strArr, strPtr);
printf( "Dotted-Decimal notation3 %s \n", strArr );
}
WSACleanup();
return 0;
}
void ErrorHandling( char* message )
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
소켓에 주소 할당하기 ------------
SOCKET servSock;
struct sockaddr_in servAddr;
char *servPort = "9190";
// 소켓 생성
servSock = socket( PF_INET, SOCK_STREAM, 0 );
// 주소 정보 초기화
memset( &servAddr, 0, sizeof(servAddr) );
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = htonl( INADDR_ANY );
servAddr.sin_port = htons( atoi(servPort) );
// 주소 할당
bind(servSock, (struct sockaddr*)&servAddr, sizeof(servAddr) );
윈도우 운영체제용 주소 변환함수(윈도우에서만 사용가능 편하지만 범용성이 없다고 생각하자.) ------------
INT WSAAPI WSAStringToAddress( _In_ LPTSTR AddressString, -> IP와 PORT번호를 담고 있는 문자열의 주소값 _In_ INT AddressFamily, -> 첫 번째 인자로 전달된 주소정보가 속하는 주소체계 정보전달. _In_opt_ LPWSAPROTOCOL_INFO lpProtocolInfo, -> 프로토콜 프로바이더(Provider) 설정, 일반적으로 NULL전달 _Out_ LPSOCKADDR lpAddress, -> 주소 정보를 담을 구조체 변수의 주소 값 전달 _Inout_ LPINT lpAddressLength -> 네 번째 인자로 전달된 주소 값의 변수 크기를 담고 있는 변수의 주소 값 );
// 구조체 변수에 저장된 데이터를 참조하여 주소정보를 담고 있는 문자열을 만들어서 반환한다.
INT WSAAPI WSAAddressToString( _In_ LPSOCKADDR lpsaAddress, -> 문자열로 변환할 주소정보를 지니는 구조체 변수의 주소 값 전달 _In_ DWORD dwAddressLength, -> 첫번째 인자로 전달된 구조체 변수의 크기 전달 _In_opt_ LPWSAPROTOCOL_INFO lpProtocolInfo, -> 프로토콜 프로바이더(Provider) 설정, 일반적으로 NULL전달 _Inout_ LPTSTR lpszAddressString, -> 문자열로 변환된 결과를 저장할 배열의 주소 값 전달 _Inout_ LPDWORD lpdwAddressStringLength -> 네 번째 인자로 전달된 주소 값의 배열 크기를 담고 있는 변수의 주소 값 전달 );
'게임개발공부 > 서버 공부' 카테고리의 다른 글
열혈강의 TCP/IP <TCP의 실제적인 데이터 입출력> (0) | 2013.11.29 |
---|---|
열혈강의 TCP/IP <소켓을 통한 서버 클라이언트 생성> (0) | 2013.11.29 |
열혈강의 TCP_IP <소켓에 대한 설명 UDP와 TCP의 차이 설명> (0) | 2013.11.29 |
열혈강의 TCP_IP <소켓에 대한 설명> (0) | 2013.11.28 |
윤성우의 tcp/ip 소켓 프로그래밍 <소켓 이해하기> (0) | 2013.11.24 |