[[프로그래밍_NOTE]]/Window Programing

[ Windows 기반의 Hello World! 클라이언트 프로그램 ]

갑빠돌격기 2008. 7. 30. 11:04

/************************************************************************
helloworld_client_win.c
 Written by SW.Yoon
  참고 : TCP/IP 소켓 프로그래밍 / 윤성우 | 저

- 컴파일전 반드시 ws2_32.lib 라이브러리를 링크시켜야 한다.
- argument 값으로 <IP> <PORT> 를 넘겨줘야 한다.
************************************************************************/

#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  hSocket;
 char  message[30];
 int   strLen;
 SOCKADDR_IN servAddr;

 if(argc != 3)
 {
  printf("Usage : %s <IP> <port> \n" , argv[0]);
  exit(1);
 }

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

 //서버 접속을 위한 소켓 생성
 hSocket = socket(PF_INET , SOCK_STREAM, 0);
 if(hSocket == INVALID_SOCKET)
  ErrorHandling("hSocketet() error!");

 memset(&servAddr , 0 , sizeof(servAddr));
 servAddr.sin_family  = AF_INET;
 servAddr.sin_addr.s_addr= inet_addr(argv[1]);
 servAddr.sin_port  = htons(atoi(argv[2]));

 //서버로 연결 요청
 if( connect(hSocket , (SOCKADDR*)&servAddr , sizeof(servAddr))
                                                                         == SOCKET_ERROR )
  ErrorHandling("connect() error!");

 //데이터 수신
 strLen = recv(hSocket , message , sizeof(message)-1 , 0);

 if(strLen==-1)
  ErrorHandling("read() error!");
 message[strLen]=0;
 printf("Message from server : %s\n" , message);

 //연결 종료
 closesocket(hSocket);
 WSACleanup();
 return 0;
}

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