본문 바로가기
코스웨어/15년 스마트컨트롤러

20151130-김재홍-윈도우소켓

by 알 수 없는 사용자 2015. 11. 30.
728x90
반응형

/***윈도우소켓***/


Server.c


#include <winsock.h> 
#include<stdio.h>

#define PORT 7755
#define IP "192.168.0.207"
#define MAX_PACKETLEN 512 

#pragma comment(lib, "Wsock32.lib")

int main()
{
  WSADATA wsaData; 
  SOCKET sSock;
  SOCKET cSock;
  SOCKADDR_IN sAddr;
  int iRet;
  int iLen; 
  int Writen;
  char ReadBuffer[MAX_PACKETLEN]; 

  if(0 != WSAStartup( MAKEWORD(22), &wsaData ))
  {
    //int WSAStartup( WORD wVersionRequested, WSADATA* lpWSAData)

    printf("error\r\n"); 
    return 0;
  }
  
  sSock = socket(AF_INET, SOCK_STREAM, 0); 
  if(sSock == INVALID_SOCKET)
  {
    return 1;
  }

  memset( &sAddr, 0sizeof(SOCKADDR_IN));
  
  sAddr.sin_family = AF_INET; 
    sAddr.sin_port = htons( PORT ); 
    sAddr.sin_addr.S_un.S_addr = inet_addr(IP);

  iRet = bind( sSock, (SOCKADDR_IN*)&sAddr, sizeof( SOCKADDR_IN ) ); //바인드 시키고난 다음엔 구조체느 필요 없음여
  if( iRet == SOCKET_ERROR)  
    { 
        printf("Bind Error\n"); 
        return 0
    } 
  
  if( SOCKET_ERROR == listen( sSock, 5 )) 
    { 
        printf("listen Error\n"); 
        return 0
    } 

  while(1)
  {
    memset( &sAddr, 0sizeof(SOCKADDR_IN));
    iLen = sizeof(SOCKADDR_IN);
    cSock = accept( sSock, (SOCKADDR_IN*)&sAddr, &iLen ); 
    if(cSock == INVALID_SOCKET) 
        { 
            printf("Accept Error\n"); 
            closesocket(sSock); 
            WSACleanup(); 
            return 1
        } 

    printf("incoming Client [%s]:[%d]\n", inet_ntoa(sAddr.sin_addr), ntohs(sAddr.sin_port));
    
    iLen = recv( cSock, ReadBuffer, MAX_PACKETLEN,0 ); 
    
     if( iLen > 0 ) 
        { 
            Writen = send( cSock, ReadBuffer, iLen, 0 ); 
        } 
        else 
        { 
            printf("recv Error\n"); 
        } 

        closesocket(cSock);  
    if(0 == strcmp(ReadBuffer, "quit") )
    {
      break;
    }
  }

  closesocket( sSock );  
  WSACleanup(); 
  return 0;
}



Client.c


#include <winsock.h>
#include <stdio.h>

#pragma comment(lib, "Ws2_32.lib")

#define PORT      5551
#define MAXLEN      1024

int main(int argc, char **argv)
{
  SOCKET sSock;
  SOCKET cSock;
  SOCKET sockfd;
  
  int iLen;
  
  WSADATA wsaData;
  char buf[MAXLEN];
  char rbuf[MAXLEN];

  SOCKADDR_IN addr;

  if (argc != 2)
  {
    printf("Usage : %s [ip address]\n", argv[0]);
    return 1;
  }

  if (WSAStartup(MAKEWORD(2,2), &wsaData) != NO_ERROR)
  {
    return 1;
  }

  if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
  {
    return 1;
  }


  memset((void *)&addr, 0sizeof(SOCKADDR_IN));

  addr.sin_family = AF_INET;
  addr.sin_port = htons(PORT);
  addr.sin_addr.S_un.S_addr = inet_addr(argv[1]);

  if (connect(sockfd, (struct sockaddr *)&addr, sizeof(addr)) == SOCKET_ERROR)
  {
    return 1;
  }

  while (1)
  {
    printf("> ");
    fgets(buf, MAXLEN - 1, stdin);
    if (strncmp(buf, "quit\n"5== 0)
    {
      break;
    }

    send(sockfd, (void *)buf, strlen(buf), 0);
    memset(rbuf, 0x00, MAXLEN);
    recv(sockfd, (void *)buf, MAXLEN, 0);
    printf("s -> %s\n", buf);
  }

  closesocket(sockfd);
  WSACleanup();  
  return 0;
}




728x90