[C++] afxsock 통신 - 서버편


Development note/C , C++ , MFC  2012. 9. 30. 17:35

안녕하세요. 명월입니다.

 

최근에는 소켓 통신 프로그램이라던가 네트워크 프로그램을 C++로 작성하는 일이 예전보다는 상당히 줄어든 것 같습니다. C#이나 Java의 경우가 소켓 통신 라이브러리가 더 많아서 그러지 않을까 생각됩니다.

그러나 그 세밀한 차이까지는 저도 잘 모르고 일단 afxsock으로 통신을 할 수 있다라는 것을 인지하고 필요하 실때 사용하면 도움이 되곘습니다.

소스 파일의 상단에 afxsock.h를 선언하겠습니다.

WSADATA wsadata;
WSAStartup(MAKEWORD(2,2),&wsadata);

SOCKET s;
SOCKET client_s;

SOCKADDR_IN m_addr;
SOCKADDR_IN m_clientAddr;

int nLen = sizeof(m_clientAddr);
char ipbuf[16];

s = socket(AF_INET,SOCK_STREAM, 0);

m_addr.sin_family = AF_INET;
m_addr.sin_addr.s_addr = htonl(INADDR_ANY);
m_addr.sin_port = htons(9999);

bind(s, (LPSOCKADDR)&m_addr, sizeof(m_addr));

listen(s, 5);
int a=0;
while(true)
{
  if (( client_s = accept(s, (LPSOCKADDR)&m_clientAddr, (int *)&nLen)) == INVALID_SOCKET)
  {
    printf("에러");
  }
  else
  {
    char* buf;
    buf = (char *)malloc(1024);
    memset(buf,0,1024);
    buf = "Hello world\n";
    printf("%s",buf);
    send(client_s,buf,1024,0);
  }
  printf("%d\n",a);
  a++;
  closesocket(client_s);
}
closesocket(s);

소켓 통신은 한쪽만으로 결과를 확인 하기 어려우니 클라이언트에서 결과화면을 확인하겠습니다.

참고 소스 :Blog20120930[1].zip