본문 바로가기

[+] Information/[-] Network

[2009/05/26] 예제소스(make_socket_linux.c, make_socket_win.c)

/* make_socket_linux.c */

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

void error_handling(char *message);

int main(int argc, char **argv)
{
int tcp_socket;
int udp_socket;

 /* 연결지향 TCP 소켓 생성 */
 tcp_socket=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 if(tcp_socket==-1)
  error_handling("socket() error");

 /* 비 연결지향 UDP 소켓 생성 */
 udp_socket=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
 if(udp_socket==-1)
  error_handling("socket() error");

 printf("생성된 TCP 소켓의 파일 디스크립터 : %d \n", tcp_socket);
 printf("생성된 UDP 소켓의 파일 디스크립터 : %d \n", udp_socket);

 close(tcp_socket);
 close(udp_socket);
 return 0;
}

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






/* make_socket_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 hTCPSock;
 SOCEKT hUDPSock;

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

 /* 연결지향 TCP 소켓 생성 */
 hTCPSock=socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
 if(hTCPSock==INVALID_SOCKET) // INVALID_SOCKET = -1
            ErrorHandling("socket() error!);

 /* 비 연결지향 UDP 소켓 생성 */
 hUDPSock=socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP);
 if(hUDPSock==INVALID_SOCKET)
            ErrorHandling("socket() error");

 printf("생성된 TCP 소켓의 핸들 : %d \n", hTCPSock);
 printf("생성된 UDP 소켓의 핸들 : %d \n", hUDPSock);

 closesocket(hTCPSock);
 closesocket(hUDPSock);

 WSACleanup();
 return 0;
}

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


전 왜 소스를 보면 리눅스 쪽이 더 쉬워 보이는걸까요 ㄷㄷ