23Àå À©µµ¿ì¿ë ¸ÖƼij½ºÆ® ÇÁ·Î±×·¥ ¿¹Á¦ ¿À·ù
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.


°ü·Ã Áú¹® : [http]P573. window Multicating example Áú¹®ÀÔ´Ï´Ù.

23Àå. À©µµ¿ì¿ë ¸ÖƼij½ºÆ® ÇÁ·Î±×·¥ ¿¹Á¦¸¦ ´ÙÀ½°ú °°ÀÌ ¼öÁ¤ÇÕ´Ï´Ù. Á¦°¡ ¹®¼­¸¦ ¸¸µç ȯ°æÀº Visual C++ 2008¿¡¼­ È®ÀåÀÚ¸¦ .c ·Î ÄÄÆÄÀÏ Çß½À´Ï´Ù. c++À» °í·ÁÇÏÁö ¾Ê¾Ò±â ¶§¹®¿¡, c++·Î ÄÄÆÄÀÏ ÇÒ°æ¿ì void * Çüº¯È¯µî¿¡¼­ ¹®Á¦°¡ ¹ß»ýÇÕ´Ï´Ù. c++Àº cº¸´Ù Çüº¯È¯ ±ÔÄ¢ÀÌ ¾ö°ÝÇϱ⠶§¹®ÀÔ´Ï´Ù. ¿¹ÄÁµ¥ ´ÙÀ½°ú °°Àº °æ¿ìÀä. cÄÄÆÄÀÏ·¯·Î´Â ÄÄÆÄÀÏ µÇÁö¸¸ c++·Î´Â ÄÄÆÄÀÏ µÇÁö ¾Ê½À´Ï´Ù.
#include <stdio.h> 
 
void hello(const char *a) 
{ 
  printf("%s\n", a); 
} 
int main() 
{ 
  char *s="hello world"; 
  void *d; 
  d = (void *)s; 
 
  hello(d); 
} 
 

23ÀåÀÇ ¿¹Á¦¸¦ ÄÄÆÄÀÏ ÇÒ°æ¿ì setsockopt¿¡¼­ Çüº¯È¯ ¿É¼ÇÀÌ ¹ß»ýÇϴµ¥, À̸¦ const char*·Î C++¿¡¼­µµ ÄÄÆÄÀÏ °¡´ÉÇϵµ·Ï ¼öÁ¤Çß½À´Ï´Ù.

±×¸®°í read¸¦ fgetsÇÔ¼ö·Î ¼öÁ¤Çß½À´Ï´Ù. ¿Ö read°¡ µé¾î°¬´ÂÁö.. ¸ð¸£°Ú½À´Ï´Ù.-.-;

¼öÁ¤ÇÑ ÄÚµå.
#include <winsock2.h> 
#include <stdio.h> 
#include <ws2ipdef.h> 
#include <ws2tcpip.h> 
 
#define MAXLINE 1024 
 
char *msg_exit ="exit\n"; 
 
DWORD WINAPI ThreadFunction(LPVOID lpParm); 
 
int main(int argc, char **argv) 
{ 
    WSADATA wsaData; 
    SOCKET read_fd; 
    SOCKET send_fd; 
    int flag; 
 
    struct sockaddr_in mcast_group; 
    struct ip_mreq mreq; 
 
    char name[16]; 
    char message[MAXLINE]; 
 
    if(argc != 4) 
    { 
        printf("Usage : %s \n", argv[0]); 
        return 1; 
    } 
 
    if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0) 
    { 
        printf("WSAStartup error\n"); 
        return 1; 
    } 
    sprintf(name, "%s", argv[3]); 
    memset(&mcast_group, 0x00, sizeof(mcast_group)); 
 
    mcast_group.sin_family = AF_INET; 
    mcast_group.sin_port = htons(atoi(argv[2])); 
    inet_pton(AF_INET, argv[1], &mcast_group.sin_addr); 
 
    if( read_fd = socket(AF_INET, SOCK_DGRAM, 0) < 0 ) 
    { 
        return 1; 
    } 
 
    mreq.imr_multiaddr = mcast_group.sin_addr; 
    mreq.imr_interface.s_addr = htonl(INADDR_ANY); 
 
    if(setsockopt(read_fd, IPPROTO_IP, IP_ADD_MEMBERSHIP, (const char *)&mreq, sizeof(mreq))<0) 
    { 
        printf("error : add group\n"); 
        return 1; 
    } 
    flag = 1; 
    if(setsockopt(read_fd, SOL_SOCKET, SO_REUSEADDR, (const char *)&flag, sizeof(flag)) < 0) 
    { 
        printf("Socket Reuseaddr Error\n"); 
        return 1; 
    } 
 
    if(bind(read_fd, (struct sockaddr *)&mcast_group, sizeof(mcast_group)) < 0) 
    { 
        return 1; 
    } 
 
    if( (send_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0 ) 
    { 
        return 1; 
    } 
  CreateThread( 
        NULL, 
        0, 
        ThreadFunction, 
        &read_fd, 
        0, 
        NULL); 
    while(1) 
    { 
        memset(message, 0x00, MAXLINE); 
        fgets(message, MAXLINE, stdin); 
        sprintf(message, "%s : %s", name, message); 
        if(sendto(send_fd, message, strlen(message), 0, (struct sockaddr *)&mcast_group, sizeof(mcast_group)) < strlen(message)) 
        { 
            return 1; 
        } 
    } 
    WSACleanup(); 
    return 0; 
 
} 
 
DWORD WINAPI ThreadFunction(LPVOID lpParm) 
{ 
    int addrlen; 
    char message[MAXLINE]; 
    struct sockaddr_in from; 
    SOCKET read_fd; 
    read_fd = *(int *)lpParm; 
    addrlen = sizeof(from); 
    memset(message, 0x00, MAXLINE); 
    if(recvfrom(read_fd, message, MAXLINE, 0, (struct sockaddr *)&from, &addrlen)) 
    { 
        printf("error : recvfrom\n"); 
            return 1; 
    } 
    printf("%s", message); 
} 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.