본문 바로가기

[+] Information/[-] Network

[2009/05/27] 예제소스(endian_conv.c, endian_conv_win.c, inet_ntoa.c, inet_addr.c, bind_sock_win.c, bind_sock.c)

/* endian_conv.c */

#include <stdio.h>

int main(int argc, char **argv)
{
 short host_port_order = 0x1234;
 short net_port_order;

 long host_add_order = 0x12345678;
 long net_add_order;

 net_port_order = htons(host_port_order);
 net_add_order = htonl(host_add_order);

 printf(" Host ordered port : %x \n", host_port_order);
 printf(" Network ordered port : %x \n\n", net_port_order);

 printf(" Host ordered Address : %x \n", host_add_order);
 printf(" Network ordered Address : %x \n", net_add_order);

 return 0;
}


출력 결과 :
Host ordered port : 1234
Network ordered port : 3412

Host ordered Address : 12345678
Network ordered Address : 78563412




/* endian_conv_win.c */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>

void ErrorHandling(char *message);

int main(int argc, char **argv)
{
 WSADATA wsaData;
 short hostOrdPort = 0x1234;
 short netOrdPort;

 long hostOrdAdd = 0x12345678;
 long netOrdAdd;

 if(WSAStartup(MAKEWORD(2, 2), wsaData) != 0)
  ErrorHandling("WSAStartup() error!"); /* Load Winsock 2.2 DLL */

 netOrdPort = htons(hostOrdPort);
 netOrdAdd = htonl(hostOrdAdd);

 printf(" Host ordered port : %x \n", hostOrdPort);
 printf(" Network ordered port : %x \n\n", netOrdPort);

 printf(" Host ordered Address : %x \n", hostOrdAdd);
 printf(" Network ordered Address : %x \n", netOrdAdd);

 WSACleanup();
 return 0;
}

void ErrorHandling(char *message)
{
 fputs(message, stderr);
 fputc('\n', stderr);
 exit(1);
}





/* inet_ntoa.c */

#include <stdio.h>
#include <arpa/inet.h>

int main(int argc, char **argv)
{
 struct sockaddr_in addr1, addr2;
 char * str;
 addr1.sin_addr.s_addr=htonl(0x1020304);
 addr2.sin_addr.s_addr=htonl(0x1010101);

 str = inet_ntoa(addr1.sin_addr);
 printf("Dotted-Decimal notation : %s \n", str);
 inet_ntoa(addr2.sin_addr);
 printf("Dotted-Decimal notation : %s \n\n", str);
 return 0; 
}


출력 결과 :
Dotted-Decimal notation : 1.2.3.4
Dotted-Decimal notation : 1.1.1.1





/* inet_addr.c */

#include <stdio.h>
#include <arpa/inet.h>

int main(int argc, char **argv)
{
 char * addr1 = "1.2.3.4";
 char * addr2 = "1.2.3.256";
 unsigned long conv_addr;

 conv_addr = inet_addr(addr1);
 if(conv_addr == INADDR_NONE)
  printf("Error Occur : %d \n", conv_addr);
 else
  printf("Unsigned long addr(network ordered) : %x \n", conv_addr);

 conv_addr = inet_addr(addr2);
 if(conv_addr == INADDR_NONE)
  printf("Error Occur : %d \n", conv_addr);
 else
  printf("Unsigned long addr(network ordered) : %x \n", conv_addr);

 return 0;
}


출력 결과 :
Unsigned long addr(network ordered) : 4030201
Error Occur : -1





/* bind_sock_win.c */

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>

void ErrorHandling(char *message);

int main(int argc, char **argv)
{
 WSADATA wsaData;

 SOCKET hServSock;
 char *servIP = "127.0.0.1";
 char *servPort = "9190";
 SOCKADDR_IN servAddr; /* struct sockaddr_in servAddr (typedef로 SOCKADDR_IN이라고 선언되어있음) */

 if(WSAStartup(MAKEWORD(2, 2), wsaData) != 0)
  ErrorHandling("WSAStartup() error!");  /* Load Winsock 2.2 DLL */

 hServSock = socket(PF_INET, SOCK_STREAM, 0); // IPv4 기반의 연결 지향 TCP 소켓 생성.
 if(hServSock == INVALID_SOCKET)
  ErrorHandling("socket() error");

 memset(&servAddr, 0, sizeof(servAddr));
 servAddr.sin_family = AF_INET;
 servAddr.sin_addr.s_addr = inet_addr(servIP);
 servAddr.sin_port = htons(atoi(servPort);

 if( bind(hServSock, (SOCKADDR*) &servAddr, sizeof(servAddr)) == SOCKET_ERROR ) /* 소켓의 주소 할당 */
  ErrorHandling("bind() error");

 printf("파일 디스크립터 %d 의 소켓에 주소 할당까지 완료!\n\n", hServSock);

 WSACleanup();
 return 0;
}

void ErrorHandling(char *message)
{
 fputs(message, stderr);
 fputc('\n', stderr);
 exit(1);
}


출력 결과 :
파일 디스크립터 104 의 소켓에 주소 할당까지 완료!





/* bind_sock.c */

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>

void error_hacdling(char *message);

int main(int argc, char **argv)
{
 int serv_sock;
 char *serv_ip = "127.0.0.1";
 char *serv_port = "9190";
 struct sockaddr_in serv_addr;

 serv_sock = socket(PF_INET, SOCK_STREAM, 0); /* 소켓 생성 */
 if(serv_sock == -1)
  error_handling("socket() error");

 memset(&serv_addr, 0, sizeof(serv_addr));
 serv_addr.sin_family = AF_INET;
 serv_addr.sin_addr.s_addr = inet_addr(serv_ip); // htons(INADDR_ANY);
 serv_addr.sin_port = htons(atoi(serv_port));

 if( bind(serv_sock, (struct sockaddr*) &serv_addr, sizeof(serv_addr)) == -1 ) /* 소켓에 주소를 할당 */
  error_handling("bind() error");

 printf("파일 디스크립터 %d 의 소켓에 주소 할당까지 완료!\n\n", serv_sock);
 
 return 0;
}

void error_handling(char *message)
{
 fputs(message, stderr);
 fputc('\n', stderr);
 exit(1);
}


출력 결과 :
파일 디스크립터 3의 소켓에 주소 할당까지 완료!