C++은 C의 포장 판인 것이고, MFC 도 Win32 를 통하지 않고는 동작을 못한다.
윈도우 소켓을 만들려고 한다면, 유닉스에서 따르는 것도
유닉스랑 다른 개념은,
if(WSAStartup(MAKEWORD(2,2),&wsaData)!= 0) { printf("error\r\n"); return 0; }
WSACleanup();
WSAStartup()
WSACleanup()
이 두개의 함수 가 반드시 존재해야 한다라는 점이고,
Startup() 는 첫번째 인자에 MAKEWORD()로 버전을 알려줘야 한다.
#include <winsock.h> |
현재 화면이다. 이건 예전 버전 윈속 라이브러리를 추가한 코드 고,
#include <winsock2.h> |
이건 최신버전이다.
gcc 에서도
컴파일 시에 -lsocket 으로 소켓 라이브러리를 원래는 넣어야 했었는데 지금은 gcc 버전이 높아지면서 이 라이브러리 추가를 안해도 되는 것으로 바뀌었다.
유닉스에서 빼꼈기에 형태는 비슷하지만 스타트업이랑 클린업이 반드시 존재해야 한다.
그래서 어떤 면에서는 리눅스 쪽이 더 낫다. 불편한 점 이다 이 부분은,
라. MAKEWORK 매크로
1 2 3 4 | WORD MAKEWORD( BYTE bLow; //하위비트 BYTE bHigh; //상위비트 ); |
htons() 이건 원래 유닉스 용 소켓 함수다. 그러니까 될지 않될지 모르는 것. 꼭 실험 해봐야 하는 것이다.
inet_addr() 이건 원래 윈도우에서도 가능하다.
SOCKET socket(
int af,
int type,
int protocol
);
AF -> 주소 체계
type -> 소켓 타입
protocol ->사용할 통신규약
주소 체계(Address Family)
자신이 사용할 프로토콜을 사용하기 위한 지정방법.
AF_INET -> IPv4 기반 TCT / UDP
AF_INET6 -> IPv6 기반 TCT / UDP
AF_IRDA -> Infra Red Data Association 무선 적외선 통신
AF_BTH -> 블루투스.
ㄴ AF대신에 PF(Protocol Family)를 사용할 수도 있고 가능하지만, 대개는 AF를 사용하므로 AF를 사용하자.
소켓 타입(socket Type)
사용할 프로토콜의 특성을 나타내는 값.
SOCK_STREAM : 신뢰성 있는 데이터 전송 / 연결형 프로토콜
SOCK_DGRAM : 신뢰성 없는 데이터 전송 / 비 연결형 프로토콜
프로토콜
주소의 체계와 소켓 타입만으로는 결정할 수 없는 경우가 있다. 두 정보가 같아도 다른 케이스가 있기 때문이다. 그러나 TCP / UDP 프로토콜은 주소 체계와 소켓 타입마능로 프로토콜을 결정할 수 있으므로, 대개는 0 을 사용한다.
윈속의 서버와 클라이언트 동기식 채팅 프로그램은 이러하다.
리눅스 쪽 bind() 와 윈도우 쪽 bind() 도 쓸 때 주의해야 한다. 인자값이 다를 수 있다.
이런 차이점들을 잘 정리 해놔야 한다.
바. bind() 함수
1 2 3 4 5 | int bind( SOCKET sockfd, //소켓의 파일 디스크립터 const struct sockaddr FAR * name, //SOCKADDR_IN 구조체 포인터 int namelen //인자로 전달된 주소 정보 구조체의 길이 ); |
구조체의 정보를 등록 시키기 위해서만 필요하고,
바인드 시키는 순간 이 구조체는 소켓에 들어 앉기 때문에 필요가 없어진다.
들어오는 애의 정보를 가져오기 때문에 따로 구조체를 쓰는데 이미 바인드()를 통과했기에 필요가 없으므로 재활용
'코스웨어 > 15년 스마트컨트롤러' 카테고리의 다른 글
20151201-김재홍-ARM_Assembly (3) | 2015.12.01 |
---|---|
2015.12.01_[ARM #3][Winsock #2]_이량경_ARM ADS, socket (2) | 2015.12.01 |
20151201 엄민웅 - arm 임베디드레시피 (교제 162~199) WinSock 2일차. (3) | 2015.12.01 |
20151201 - 권오민 - ARM ASSEMBLY 4일차/WinSock 2일차 (2) | 2015.12.01 |
2015-11-30 Win32 API Socket 개인업무일지 - 천정호 (5) | 2015.12.01 |
20151130 김태현 업무일지 Winsock #1 (4) | 2015.12.01 |
2015.11.30_[Winsock #1]_이량경_소켓통신 (3) | 2015.12.01 |
20151130 - 강동조 개인업무일지 winsock1일차 (5) | 2015.12.01 |