서버가 클라이언트의 접속을 기다리다가 클라이언트가 접속 되었을때
어느 클라이언트가 접속 했는지 알아야 할때가 있다.

accept가 되어지면 accept함수의 두번째 파라미터에 상대방에 대한 정보가 저장되어진다.
예제는 accept한 상대방의 IP어드레스와 포트를 표시한다.
(IP어드레스는 문제없이 가져오는데 포트를 제대로 못가져온다. -.-;;; )
(왜 이상한 포트 번호가 넘어오는지 모르겠다. -.-????? )

 


#include <winsock2.h>

#include <stdio.h>


int main()

{

    WSADATA   wsaData;

    SOCKET    sockSvr;

    SOCKET    sockSS;

    int       nlen;

    struct sockaddr_in    addrSockSvr;

    struct sockaddr_in    addrSockclt;


    // 윈속 초기화

    WSAStartup(MAKEWORD(2, 0), &wsaData);


    // 소켓 만들기

    sockSvr = socket(AF_INET, SOCK_STREAM, 0);


    // 소켓 설정

    addrSockSvr.sin_family = AF_INET;

    addrSockSvr.sin_port = htons(333);

    addrSockSvr.sin_addr.S_un.S_addr = INADDR_ANY;

    bind(sockSvr, (struct sockaddr *)&addrSockSvr, sizeof(addrSockSvr));


    // TCP클라이언트로 부터 접속 요구를 대기

    listen(sockSvr, 5);


    while (1) {


        // TCP클라이언트로 부터 접속 요구 받기\tab   

        nlen = sizeof(addrSockclt);

        sockSS = accept(sockSvr, (struct sockaddr *)&addrSockclt, &nlen);


        // 문자송신

        printf("%s 로부터 접속 (포트번호:%d)\n",

                inet_ntoa(addrSockclt.sin_addr),     // IP어드레스

                ntohs(addrSockclt.sin_port));         // 포트번호


        send(sockSS, "안녕", 5, 0);


        closesocket(sockSS);

    }


    // 윈속 종료

    WSACleanup();


    return 0;

}






Posted by 띠리
BLOG main image
프로그래밍 공부하면서 써가는 개인 노트 (따라서 여기에 씌여있는 소스의 신빙성을 보장 못함 -.-;;) 이 블로그 보면서 틀린 점이 있으면 꼬옥 알려주세요. by 띠리

공지사항

카테고리

분류 전체보기 (323)
Win32 SDK 초보 (27)
통신관련 (11)
MFC TIP (20)
C/C++ TIP (10)
개발기타 (10)
링크 (2)
견물생심 (24)
이것저것 (8)
용어메모 (3)
데이터베이스 (32)
비주얼 베이직 (10)
하드웨어 (3)
C# (42)
Xcode (3)
델파이 (82)
홈페이지 (5)
MindStorm (0)
낙서 (5)
스크래치 (0)
기타 (6)
아두이노 (1)
라즈베리파이 (2)
안드로이드 (6)
파이썬 (0)
WEB (2)
Total : 995,627
Today : 117 Yesterday : 316