C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[65413] UDP로 멀티 스레드 채팅을 만들기. 질문 입니다.
하핫 [] 3296 읽음    2011-10-28 17:28
DWORD WINAPI ProcessClient(LPVOID arg)
{
    SOCKET client_sock = (SOCKET)arg;
    SOCKADDR_IN clientaddr;
    char buf[BUFSIZE+1];
    int addrlen;
    int retval;

    //    클라이언트 정보 얻기
    addrlen = sizeof(udpaddr);
    getpeername(client_sock, (SOCKADDR *)&clientaddr, &addrlen);

    while(1){

        //retval = recvn(client_sock, buf, BUFSIZE, 0);
        addrlen = sizeof(clientaddr);
        retval = recvfrom(client_sock, buf, BUFSIZE, 0, (SOCKADDR *)&clientaddr, &addrlen);
        if(retval == SOCKET_ERROR){
            err_display("recvn(zzzzzzzzzzz)");
            continue;
        }

        //    받은 데이터 출력
        buf[retval] = '\0';
        printf("[TCP/%s:%d] %s\n",
            inet_ntoa(clientaddr.sin_addr),
            ntohs(clientaddr.sin_port), buf);


        /*
        //    데이터 보내기
        retval = send(client_sock, buf, strlen(buf), 0);
        if(retval == SOCKET_ERROR) {
            err_display("sendto()");
            break;
        }
        */
    }

    //    closesocket()
    closesocket(client_sock);
    printf("[UDP 서버] 클라이언트 종료: IP 주소=%s, 포트 번호=%d\n",
            inet_ntoa(clientaddr.sin_addr),
            ntohs(clientaddr.sin_port));

    return 0;
}

///////////////////////////////////////////////////

메인에서 스레드 시작
DWORD ThreadId;
HANDLE hThread = CreateThread(NULL, 0, ProcessClient, (LPVOID)sock, 0, &ThreadId);

멀티 스레드 소스입니다. 책을 보면서 다 vs 다 채팅을 구현하려고 하는데요.
책의 멀티 스레드 내용은 tcp의 멀티 스레드 뿐이네요 ㅠㅠㅠ

서버는 여러 클라이언트로 부터 입력받은 내용을 모두 (브로드캐스트or멀티캐스트)로 sendto한 후
클라이언트는 채팅을 입력받아 보내는(sendto) 코드, 서버로부터 전송받은 것(recvfrom)을 뿌려주는 스레드
클라이언트 부분에 스레드를 만들려고 합니다.... 헌데 CreateThread 할 때 매개변수로
tcp소켓밖에 가져가지 못하네요 ㅜㅜ tcp소켓에는 소켓 어드레스 구조체가 포함되어 있는듯 한데,
udp소켓에는 보낼 때 소켓 어드레스 주소와 크기를 모두 보내야 하는데
매개변수를 추가로 줘서 메인에서 스레드 시작하는 법을 알고 싶습니다ㅠㅠ ( 매개변수 2개인 스레드 호출법)

1. Create스레드 매개변수로 소켓 이외에 소켓 어드레스 구조체도 매개변수로 받는 방법을 알고 싶습니다.
즉, udp소켓으로 멀티 스레딩 구현법을 제발 좀 알려주세욥 !~!!!!!!!!!!!!!ㅜㅜㅜ

2.getpeername(client_sock, (SOCKADDR *)&clientaddr, &addrlen);
매개변수 소켓부분에 udp소켓으로 처리하면 clientaddr, addlent부분을 못받아오는 것 인지도 알고싶습니다 ㅜㅠㅜ

+ -

관련 글 리스트
65413 UDP로 멀티 스레드 채팅을 만들기. 질문 입니다. 하핫 3296 2011/10/28
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.