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

20151201 22번 우대희 업무일지

by 알 수 없는 사용자 2015. 12. 2.
728x90
반응형

컴파일 설치 ARM ADS(ARM Developer Suite) 1.2

------- ARM ADS


ARM Developer Suite 라는 줄임말로 ARM 사에서 제작한 유료 C컴파일러

현재는 단종되었다고 합니다.


http://alisa2304.tistory.com/35


해당 페이지 참고하여 설치


>winsock


MFC 에 Win32함수를 없애버리면 함수가 동작을 못한다

MFC를할려면 기본적으로 Win32를 배워야한다

윈도우소켓을 만들려면
if(WSAStartup(MAKEWORD(2,2),&wsaData)!= 0) 
        printf("error\r\n"); 
        return 0; 
}
위 if문을 반드시 만들어줘야한다

도스도 네트워크가 가능하다

#pragma comment(lib, "Ws2_32.lib")     //비주얼에서는 자동으로 언급이된다 수동으로 할시 적어 주어야 합니다

gcc -o server server.c -lsocket 처럼 원래는 리눅스에서도 언급을 해주어야한다 요즘에는 언급을 안해도 된다

htons():     htons 유닉스것이다 저장방식이 리틀인디안인지 빅인디안인지 모르기에 저장박식을 잡아 준다

              네트워크는 빅인디안을 따르기에 만들어준다


server.c 소스

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

#pragma comment(lib, "Ws2_32.lib")  //비주얼에서는 자동으로 언급이된다

#define PORT   7777
#define IP  "192.168.0.202"
#define MAX_PACKETLEN   512


int main()
{
  WSADATA wsaData;
  SOCKET sSock;      //server
  SOCKET cSock;      //client
  SOCKADDR_IN sAddr;
  int status;
  int iLen;
  int writen;
  char ReadBuffer[MAX_PACKETLEN];
  

  if(WSAStartup(MAKEWORD(2,2),&wsaData)!= 0
      { 
            printf("error\r\n"); 
            return 0
     }

  sSock = socket(AF_INET, SOCK_STREAM,0);
  if(sSock == INVALID_SOCKET)
  {
    return 1;
  }
  
  /* 전역변수 아닌이상 쓰래기값이다*/
  memset(&sAddr,0,sizeof(sAddr));    //sizeof에 변수를 넣던지 구조체이름을 넣어도된다

  sAddr.sin_family = AF_INET;
  sAddr.sin_port = htons( PORT );  //htons 유닉스것이다 네트워크는 빅인디안을 따르기에 만들어준다
  sAddr.sin_addr.s_addr = inet_addr(IP);
  
  status = bind(sSock,(struct sockaddr*)&sAddr, sizeof(SOCKADDR_IN));

  if(status == SOCKET_ERROR)
  {
    printf("Bind Error\n");
    return 0;
  }
  
  if( SOCKET_ERROR == listen(sSock, 5)) 
      { 
       printf("listen Error\n"); 
           return 0
      }   

  while(1)
  {
    memset(&sAddr,0,sizeof(sAddr));
    iLen = sizeof(SOCKADDR_IN);
    cSock = accept(sSock,(SOCKADDR *)&sAddr,&iLen);  //구조체의크기를가지고있는 iLen
    if(cSock == INVALID_SOCKET) 
           { 
                printf("Accept Error\n"); 
                closesocket(sSock); 
                WSACleanup(); 
                return 1
          }
    printf("incoming client[%s]:[%d]\n", sAddr.sin_addr,sAddr.sin_port);
    
    iLen = recv(cSock,ReadBuffer,MAX_PACKETLEN,0);
    if(iLen > 0)
    {
      writen = send(cSock, ReadBuffer, iLen, 0);
    }
    else
    {
      printf("read Error \n");
    }
    closesocket(cSock);
    
    if(0 == strcmp(ReadBuffer,"Quit"))  //입력받은 것과 비교 후 종료문
    {

      break;
    }
    
  }
  

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


728x90