주말에 카센터 가야겠네...
'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 |
필요 헤더 및 라이브러리
#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.짱강사님
'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 |
AllocConsole();
freopen("conout$","wt",stdout);
'Sunmoon_BIT > Win32API' 카테고리의 다른 글
WSAAsyncSelect 예제 (0) | 2010.02.22 |
---|---|
소켓 통신 관련 함수 - Win32API (0) | 2010.01.18 |
WPARAM & LPARAM - WIN32API (0) | 2010.01.10 |
API기본셋팅(Visual Studio 6.0) - Win32API (0) | 2010.01.08 |
원을 그리고 키보드로 이동시키기 - Win32API (0) | 2010.01.05 |