winsock : socket ÇÔ¼ö
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : ¸Þ´º¾ó>winsock API>socket



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

socket

socket´Â endpoint socketÀ» »ý¼ºÇÑ´Ù. BSD socketÀÇ °æ¿ì ÆÄÀÏ descriptor¸¦ ¹ÝȯÇÑ´Ù. winsock socket ÇÔ¼ö´Â ¼ÒÄÏ ±â¼úÀÚ (socket descriptor) SOCKET¹Ýȯ ÇÑ´Ù. SOCKET ´Â unsigned int ÇüÀ¸·Î BSD ¼ÒÄÏÀÇ intÇü°ú ¾à°£ÀÇ Â÷À̰¡ ÀÖ´Ù. int¸¦ ½áµµ (°æ°í´Â ¹ß»ýÇÒ ¼ö ÀÖÁö¸¸) Å« ¹®Á¦´Â ¾ø´Ù. ¸ðµç°Ô ÆÄÀÏ·Î ÀçÇöµÇ´Â À¯´Ð½º¿Í ´Þ¸® À©µµ´Â ÆÄÀÏ ±â¼úÀÚ ¿Í ¼ÒÄÏ ±â¼úÀÚ°¡ ¹Ýµå½Ã ÀÏÄ¡ÇÑ´Ù°í º¼ ¼ö ¾øÀ¸¹Ç·Î SOCKETÀ» »ç¿ëÇÏ´Â°Ô ³´´Ù.
SOCKET socket 
{ 
    int af, 
    int type, 
    int protocol 
}; 
 

Parameter

af
ÁÖ¼Ò¿µ¿ªÀ» Á¤ÀÇÇϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. Winsock2.h Çì´õÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Ù. ³×Æ®¿öÅ©´Â ´Ù¾çÇÑ ÁÖ¼Ò¿µ¿ªÀ» °¡Áø´Ù. ¿ì¸®°¡ ¾Ë°í ÀÖ´Â IPv4 ±â¹ÝÀÇ ÀÎÅͳÝÀº AF_INET À» »ç¿ëÇÑ´Ù. ¸¸¾à IPv6 ÁÖ¼Ò ±â¹ÝÀ¸¶ó¸é AF_INET6¸¦ »ç¿ëÇÒ °ÍÀÌ´Ù. ±âŸ IPX, APPLETALK µîÀÇ ¿µ¿ªµéÀÌ ÀÖ´Ù.
AF_UNSPEC 0 Á¤ÀǵÇÁö ¾ÊÀº ÁÖ¼Ò¿µ¿ª
AF_INET 2 IPv4 ÁÖ¼Ò¿µ¿ª
AF_IPX 6 IPX/SPX ÁÖ¼Ò¿µ¿ª¿¡¼­ »ç¿ëµÈ´Ù. windows vista ÀÌÈÄ ºÎÅÍ´Â Áö¿øÇÏÁö ¾Ê´Â´Ù.
AF_APPLETALK 17 AppleTalk ¿¡¼­ »ç¿ëµÈ´Ù. vista ÀÌÈĺÎÅÍ´Â Áö¿øÇÏÁö ¾Ê´Â´Ù.
AF_NETBIOS 17 NetBIOS ÁÖ¼Ò¿µ¿ª¿¡¼­ »ç¿ëµÈ´Ù.
AF_INET6 23 Internet Protocol version 6 (IPv6) ÁÖ¼Ò¿µ¿ª¿¡¼­ »ç¿ëµÈ´Ù.
AF_IRDA 26 Infrared Data Association ÁÖ¼Ò¿µ¿ª¿¡¼­ »ç¿ëÇÑ´Ù.
AF_BTH 32 bluttooth ÁÖ¼Ò¿µ¿ª¿¡¼­ »ç¿ëÇÑ´Ù. windows xp with SP2 ÀÌÈÄ ¹öÀüºÎÅÍ Áö¿øÇÑ´Ù.
type
¼ÒÄÏÀÇ Åë½Å ŸÀÔÀ» ÁöÁ¤Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù. Winsock2.h Çì´õÆÄÀÏ¿¡ Á¤ÀǵǾî ÀÖ´Ù.
SOCK_STREAM 1 ¿¬°áÁöÇâ, ¾ç¹æÇâÀÇ TCP/IP ±â¹ÝÀÇ Åë½ÅÀ» À§Çؼ­ »ç¿ëµÈ´Ù.
SOCK_DGRAM 2 UDP/IP ±â¹ÝÀÇ Åë½ÅÀ» À§ÇØ »ç¿ëÇÑ´Ù.
SOCK_RAW 3 IP Çì´õ¸¦ Á÷Á¢ Á¦¾îÇϱâ À§ÇѸñÀûÀ¸·Î »ç¿ëÇÑ´Ù.
protocol
È£½ºÆ®°£ Åë½Å¿¡ »ç¿ëÇÒ ÇÁ·ÎÅäÄÝÀ» °áÁ¤Çϱâ À§Çؼ­ »ç¿ëÇÑ´Ù.
BTHPROTO_RFCOMM 3 Bluetooth Radio Frequency Åë½ÅÀ» À§Çؼ­ »ç¿ëÇÑ´Ù. SOCK_STREAM°ú ÇÔ²² »ç¿ëÇÑ´Ù.
IPPROTO_TCP 6 TCP¸¦ »ç¿ëÇÑ´Ù. AF_INET ȤÀº AF_INET6 af¿Í SOCK_STREAM type°ú ÇÔ²² »ç¿ëÇÑ´Ù.
IPPROTO_UDP 6 UDP¸¦ »ç¿ëÇÑ´Ù. AF_INET ȤÀº AF_INET6 af¿Í SOCK_DGRAM type°ú ÇÔ²² »ç¿ëÇÑ´Ù.

¸®Åϰª

¼º°øÇϸé scoket¸¦ ¸®ÅÏÇÑ´Ù. ½ÇÆÐÇϸé INVALID_SOCKET¸¦ ¸®ÅÏÇÏ°í ´ÙÀ½°ú °°Àº error code ¸¦ ¼³Á¤ÇÑ´Ù. WSAGetLastError()¸¦ ÀÌ¿ëÇϸé error code¸¦ °¡Á®¿Ã ¼ö ÀÖ´Ù.
WSANOTINITIALISED WSAStartupÀÇ ¼º°øÀûÀΠȣÃâ ¾øÀÌ »ç¿ëÇßÀ½
WSAENETDOWN ³×Æ®¿öÅ© ¼­ºê½Ã½ºÅÛ È¤Àº ¼­ºñ½º ÇÁ·Î¹ÙÀÌ´õ¿¡ ¿¡·¯ ¹ß»ý
WSAEAFNOSUPPORT ÁöÁ¤µÈ ÁÖ¼Ò Ã¼°è°¡ Áö¿øµÇÁö ¾ÊÀ½
WSAEMFILE ÇÒ´çÇÒ ¼ö ÀÖ´Â ¼ÒÄÏ ±â¼úÀÚ°¡ ¾ø¾î¼­ ´õ ÀÌ»ó ¼ÒÄÏÀ» »ý¼ºÇÒ ¼ö ¾øÀ½.
WSAENOBUFS »ç¿ëÇÒ ¼ö ÀÖ´Â ¹öÆÛ°¡ ¾ø¾î¼­ ¼ÒÄÏÀ» »ý¼ºÇÒ ¼ö ¾øÀ½
WSAEPROTOTYPE À߸øµÈ ÇÁ·ÎÅäÄÝÀ» »ç¿ëÇßÀ½
WSASOCKTNOSUPPORT À߸øµÈ ÁÖ¼Òü°è¸¦ »ç¿ëÇßÀ½

¿¹Á¦

#include <winsock.h> 
#include <stdio.h> 
 
#define MAX_PACKETLEN 512 
#define PORT 5552 
 
int main() 
{ 
    WSADATA wsaData; 
    int status; 
    int SockLen; 
    int Readn,Writen; 
    SOCKET EndpointSocket, ClientSocket; 
    struct sockaddr_in SockInfo, ClientSockInfo; 
    char ReadBuffer[MAX_PACKETLEN]; 
 
 
    if(WSAStartup(MAKEWORD(2,2),&wsaData)!= 0) 
    { 
        printf("error\r\n"); 
        return 0; 
    } 
 
    EndpointSocket = socket( AF_INET, SOCK_STREAM, 0 ); 
    if( EndpointSocket == INVALID_SOCKET ) 
        return 1; 
 
    printf("Success socket create\r\n"); 
    ZeroMemory(&SockInfo, sizeof( struct sockaddr_in )); 
 
    SockInfo.sin_family = AF_INET; 
    SockInfo.sin_port = htons( PORT ); 
    SockInfo.sin_addr.S_un.S_addr = htonl(INADDR_ANY); 
 
    status = bind( EndpointSocket, (struct sockaddr*)&SockInfo, sizeof( struct sockaddr_in) ); 
    if( status == SOCKET_ERROR)  
    { 
        printf("Bind Error\n"); 
        return 0; 
    } 
    if( SOCKET_ERROR == listen( EndpointSocket, 5 )) 
    { 
        printf("listen Error\n"); 
        return 0; 
    } 
 
    while(1) 
    { 
        ZeroMemory( &ClientSockInfo, sizeof( struct sockaddr_in ) ); 
        SockLen = sizeof(struct sockaddr_in); 
        ClientSocket = accept( EndpointSocket, (struct sockaddr*)&ClientSockInfo, &SockLen ); 
        if(ClientSocket == INVALID_SOCKET) 
        { 
            printf("Accept Error\n"); 
            closesocket(EndpointSocket); 
            WSACleanup(); 
            return 1; 
        } 
        printf("Accept Client\n"); 
        Readn = recv( ClientSocket, ReadBuffer, MAX_PACKETLEN,0 ); 
        if( Readn > 0 ) 
        { 
            Writen = send( ClientSocket, ReadBuffer, Readn, 0 ); 
        } 
        else 
        { 
            printf("read Error\n"); 
        } 
        closesocket(ClientSocket);  
    } 
    closesocket( EndpointSocket );  
    WSACleanup(); 
    return 0; 
 
} 
 
 
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.