Vehicle/Turbulence 2010. 2. 3. 16:50


주말에 카센터 가야겠네...

'Vehicle > Turbulence' 카테고리의 다른 글

차계부  (0) 2010.03.13
경보기 스피커 교체 - SM 피에조 부저  (0) 2009.12.08
엔진룸 청소 NCL-77  (1) 2009.11.13
2009/11/10 방음작업 (문짝,본네트)  (0) 2009.11.10
KIXX NEO + Bulls Power  (0) 2009.10.28
:
Sunmoon_BIT/Win32API 2010. 1. 18. 23:43

필요 헤더 및 라이브러리 

#include <winsock2.h>

#pragma commnet(lib,"ws2_32")

 

윈속 초기화 - 응용에서 한 번만 설정(일반적으로 시작시)

int WSAStartup(WORD wVersionRequested,LPWSDATA lpWSAData);

WORD wVersionRequested - 프로그래머가 사용할 윈속의 버전정보 전달.
LPWSDATA lpWSAData - WSADATA라는 구조체 변수의 주소 값 전달.
 

예 

WSADATA wsadata;

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

윈속 해제화 - 더 이상 소켓 통신 사용하는 구문 없을 때(일반적으로 종료시)

int WSACleanup(void); 
->성공기 0, 실패시 SOCKET_ERROR 반환

 

 

소켓 생성

SOCKET socket(int af, int type, int protocol);

af : address family, pf: protocol family - 같은 값
    AF_INET - IPv4 (PF_INET) -> 현재주로 사용
    AF_INET6 - IPv6 (PF_INET6)

    AF_LOCAL - UNIX Local 통신 (PF_LOCAL)
    AF_PACKET - Low Socket (PF_PACKET)
    AF_IPX - IPX (PF_IPX)

type: 전송 타입

    SOCK_STREAM - 바이트 단위 통신

    SOCK_DGRAM  - 메시지 단위 통신

protocol:

    프로토콜 구분자

    AF_INET에서는 의미 없음

        SOCK_STREAM은 protocol이 tcp밖에 없고 , SOCK_DGRAM은 protocol이 udp밖에 없음

     

예 

SOCKET sock = socket(AF_INET,SOCK_STREAM,0);

 

소켓 해제

void closesocket(SOCKET s);

 

소켓과 네트워크 디바이스 연결

int bind(SOCKET s, SOCKADDR *sa,int namelen); 

SOCKADDR - 네트워크 디바이스와 연결할 소켓 주소(공용체 , Address Family에 따라 주소 체계 다름)

namelen - 주소 길이

 

예 

SOCKADDR_IN servaddr={0,};

saddr.sin_addr.s_addr = inet_addr("192.168.0.1");

saddr.sin_famliy = PF_INET;

saddr.sin_port = htons(1024);

bind(sock,(SOCKADDR *)&servaddr,sizeof(servaddr));

 

 

동시접속 최대 client 지정(SOCK_STREAM 소켓에서)

 int listen(SOCKET s,int n);

  예 

listen(sock,5); 

 

 

client로부터 접속하기를 대기하고 연결을 수락

SOCKET accept(SOCKET s,SOCKADDR *sa,int *paddrlen);

반환: 접속한 client와 주고 받는 작업을 할 doit소켓 

첫번째 인수: listen socket

두번째 인수: 접속 수락되면 접속한 client 주소가 채워진다.

세번째 인수: address구조체 사이즈

SOCKADDR_IN clientaddr;

int len = sizeof(clientaddr);

SOCKET dosock;

dosock = accept(sock,(SOCKADDR *)&clientaddr,&len); 

 

 

연결 요청

 int connect(SOCKET s, SOCKADDR *sa, int addrlen); 

SOCKADDR_IN servaddr={0,};

saddr.sin_addr.s_addr = inet_addr("192.168.0.1");//서버측 IP주소

saddr.sin_famliy = PF_INET;

saddr.sin_port = htons(1024);

connect(sock,(SOCKADDR*)&servaddr,sizeof(servaddr)); 

  

출력 함수

int send(SOCKET s, const char  *buf, int len, int flags);

SOCKET s - 데이터 전송 대상과의 연결을 의미하느 소켓의 핸들 값 전달
const char  *buf - 전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달
int len - 전송할 바이트 수 전달
int flags - 데이터 전송시 적용할 다양한 옵션 정보 전달.


send(sock,pack,plen,0); 

int sendto(SOCKET s,const char *buf,int len,int flags,SOCKADDR *addr,int addrlen);

수신자주소와 길이를 추가하면 된다. 

 

 

입력 함수

int recv(SOCKET s, const char  *buf, int len, int flags);

SOCKET s - 데이터 수신 대상과의 연결을 의미하느 소켓의 핸들 값 전달
const char  *buf - 수신할 데이터를 저장하고 있는 버퍼의 주소 값 전달
int len - 수신할 바이트 수 전달
int flags - 데이터 수신시 적용할 다양한 옵션 정보 전달.

recv(sock,pack,plen,0); 

 

입력함수2 - UDP에서

int recvfrom(SOCKET s,const char *buf,int len,int flags,SOCKADDR *addr,int *paddrlen);

송신자주소와 길이를 추가하면 된다.

송신자 주소가 0으로 되어 있으면 모든 송신자를 의미함 

 

 

자유를 찾아서...  에서 펌

// Address families.
#define AF_UNSPEC       0               /* unspecified */
#define AF_UNIX             1               /* local to host (pipes, portals) */
#define AF_INET             2               /* internetwork: UDP, TCP, etc. */
#define AF_IMPLINK       3               /* arpanet imp addresses */
#define AF_PUP            4               /* pup protocols: e.g. BSP */
#define AF_CHAOS        5               /* mit CHAOS protocols */
#define AF_NS               6               /* XEROX NS protocols */
#define AF_IPX              AF_NS           /* IPX protocols: IPX, SPX, etc. */
#define AF_ISO              7               /* ISO protocols */
#define AF_OSI              AF_ISO          /* OSI is ISO */
#define AF_ECMA          8               /* european computer manufacturers */
#define AF_DATAKIT      9               /* datakit protocols */
#define AF_CCITT          10              /* CCITT protocols, X.25 etc */
#define AF_SNA            11              /* IBM SNA */
#define AF_DECnet       12              /* DECnet */
#define AF_DLI              13              /* Direct data link interface */
#define AF_LAT             14              /* LAT */
#define AF_HYLINK        15              /* NSC Hyperchannel */
#define AF_APPLET!ALK 16              /* AppleT!alk */
#define AF_NETBIOS     17              /* NetBios-style addresses */
#define AF_VOICEVIEW  18              /* VoiceView */
#define AF_FIREFOX      19              /* Protocols from Firefox */
#define AF_UNKNOWN1 20              /* Somebody is using this! */
#define AF_BAN             21              /* Banyan */
#define AF_ATM             22              /* Native ATM Services */
#define AF_INET6           23              /* Internetwork Version 6 */
#define AF_CLUSTER     24              /* Microsoft Wolfpack */
#define AF_12844           25              /* IEEE 1284.4 WG AF */
#define AF_MAX             26


// Socket Types
#define SOCK_STREAM        1               /* stream socket */
#define SOCK_DGRAM         2               /* datagram socket */
#define SOCK_RAW              3               /* raw-protocol interface */
#define SOCK_RDM              4               /* reliably-delivered message */
#define SOCK_SEQPACKET  5               /* sequenced packet stream */


//Protocols
#define IPPROTO_IP                 0               /* dummy for IP */
#define IPPROTO_ICMP            1               /* control message protocol */
#define IPPROTO_IGMP            2               /* internet group management protocol */
#define IPPROTO_GGP             3               /* gateway^2 (deprecated) */
#define IPPROTO_TCP              6               /* tcp */
#define IPPROTO_PUP             12              /* pup */
#define IPPROTO_UDP             17              /* user datagram protocol */
#define IPPROTO_IDP               22              /* xns idp */
#define IPPROTO_ND                77              /* UNOFFICIAL net disk proto */
#define IPPROTO_RAW             255            /* raw IP packet */
#define IPPROTO_MAX             256

//주소관련 구조체

struct sockaddr {
        u_short sa_family;                /* address family */
        char    sa_data[14];            /* up to 14 bytes of direct address */
};
struct sockaddr_in {
        short   sin_family;
        u_short sin_port;
        struct  in_addr sin_addr;
        char    sin_zero[8];
};
struct in_addr {
        union {
                struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
                struct { u_short s_w1,s_w2; } S_un_w;
                u_long S_addr;
        } S_un;
#define s_addr  S_un.S_addr                                 /* can be used for most tcp & ip code */
#define s_host  S_un.S_un_b.s_b2                         /* host on imp */
#define s_net   S_un.S_un_b.s_b1                          /* network */
#define s_imp   S_un.S_un_w.s_w2                        /* imp */
#define s_impno S_un.S_un_b.s_b4                       /* imp # */
#define s_lh    S_un.S_un_b.s_b3                          /* logical host */

typedef struct sockaddr SOCKADDR;
typedef struct sockaddr *PSOCKADDR;
typedef struct sockaddr FAR *LPSOCKADDR;
typedef struct sockaddr_in SOCKADDR_IN;
typedef struct sockaddr_in *PSOCKADDR_IN;
typedef struct sockaddr_in FAR *LPSOCKADDR_IN;
typedef struct in_addr IN_ADDR;
typedef struct in_addr *PIN_ADDR;
typedef struct in_addr FAR *LPIN_ADDR;

//주소 관련 함수군

unsigned long inet_addr ( const char FAR * cp  );
char FAR * inet_ntoa ( struct in_addr in  ); 

 

//미리 예약된 주소들
#define INADDR_ANY                    (u_long)0x00000000
#define INADDR_LOOPBACK         0x7f000001
#define INADDR_BROADCAST      (u_long)0xFFFFFFFF
#define INADDR_NONE                 0xFFFFFFFF

 By.짱강사님

DAUM CAFE [EHCLUB]

'Sunmoon_BIT > Win32API' 카테고리의 다른 글

Mouse & WPARAM & LPARAM  (0) 2010.05.03
WSAAsyncSelect 예제  (0) 2010.02.22
API사용중 콘솔창 띄우기 - Win32API  (0) 2010.01.15
WPARAM & LPARAM - WIN32API  (0) 2010.01.10
API기본셋팅(Visual Studio 6.0) - Win32API  (0) 2010.01.08
:
Sunmoon_BIT/Win32API 2010. 1. 15. 19:18

AllocConsole();
freopen("conout$","wt",stdout);
: