[WSA] WinSock 실행 흐름

소켓 통신 프로그래밍

  API / 클래스 설명 제공 기능 OS/PL
Unix Socket API 네트워크 표준 API TCP, UDP 등 다양한 네트워크에 사용 Unix(Ubuntu, Redhat..)
Win WinSock2 API Socket API 윈도우 버전 Window(C/C++)
C#
.NET
Sockets WinSock2 API C# 버전 Window(C#)
TcpClient Sockets 클래스 내재됨 TCP, UDP 전용
TcpListner
UdpClient

윈도우 소켓 실행 흐름

WSA(WinSock API)

WSAStartup( )

: winsock 초기화 : 반드시 프로그램에서 요구하는 winsock 버전을 명시하고, 라이브러리 초기화를 진행해야 한다.

#include <winsock2.h>

int WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);

// 성공시 0, 실패시 0이 아닌 에러코드
// wVersionRequired : 윈속 버전 정보
// lpWSAData        : WSADATA 구조체 변수 포인터
WSAStartup(MAKEWORD(2,2), &wsaData)

// MAKEWORKD 매크로를 이용해 윈도우 소켓 버전을 명시한다.
// winsock 버전 1.2의 경우, MAKEWORD(1, 2)는 0x0102 상위 8비트 주 버전 1, 하위 8비트 부 버전 2 
// winsock 버전 2.2의 경우, MAKEWORD(2, 2)는 0x0202 상위 8비트 주 버전 2, 하위 8비트 부 버전 2
int main(int argc, char* argv[])
{
    WSADATA wsaData;
    ...
    if(WSAStartup(MAKEWORD(2,2), &wsaData))
    	ErrorPrint("WSAStartup() error!");
    ...
    return 0;
}

WSAcleanup( )

:  winsock 해제

int WSAStartup(void);
// 성공시 0; 실패시 SOCKET_ERROR

Window Socket 관련 함수

: 리눅스 기반의 소켓 함수와 큰 차이가 없다.

: 소켓 핸들을 사용한다.

SOCKET WSAAPI socket( int af, int type, int protocol );
// 성공시 소켓 핸들, 실패시 INVALID_SOCKET
int bind( SOCKET s, const sockaddr *addr, int namelen );
// 성공시 소켓 핸들, 실패시 SOCKET_ERROR
int WSAAPI listen( SOCKET s, int backlog );
// 성공시 0, 실패시 SOCKET_ERROR
SOCKET WSAAPI accept( SOCKET s, sockaddr *addr, int *addrlen );
// 성공시 소켓 핸들, 실패시 INVAILD_SOCKET
int WSAAPI connect( SOCKET s, const sockaddr *name, int namelen );
// 성공시 0, 실패시 SOCKET_ERROR
int WSAAPI closesocket( SOCKET s );
// 성공시 0, 실패시 SOCKET_ERROR

Window 입출력 함수

: 리눅스 read/write, send/recv

: 윈도우   -  /   -   , send/recv

int send(
  SOCKET s,     // 소켓 핸들값
  char   *buf,  // 전달할 데이터 버퍼의 주소값
  int    len,   // 전달할 바이트 수
  int    flags  // 전달할때 옵션
);

// 성공시 수신 바이트 수, 실패시 SOCKET_ERROR
int recv(
  SOCKET s,     // 소켓 핸들값
  char   *buf,  // 전달받을 데이터 버퍼의 주소값
  int    len,   // 전달받을 바이트 수
  int    flags  // 전달받을때 옵션
);

// 성공시 수신 바이트 수, 실패시 SOCKET_ERROR

댓글

공지사항
업데이트
인기 글
최근댓글
태그
C2027 정의되지 않은 형식 'timespec' How to show/hide the macOS Dock instantly if(false) socket programming MariaDB Connector/C++ 네이버 제휴 카드 적립 우분투 qt 2진법과 서수 fgets( ) 개행('\0')과 NULL 처리 Magic Keyboard with Touch ID 맥 독 반응 속도 M1 Parallels Ubuntu QT install littem endian MariaDB Connector C networking 네이퍼 적립 계산 윈도우 timespecs m1 윈도우 단축키 윈도우 db 리턴 0 이유 네이버 적립 고정 소수점 m1 Shift space 우분투 독 비활성화 mariadb 삭제 알고리즘이란 stream buffer fputc( ) C# 메서드 m1 페러렐즈 단축키 실제 저장 용량 db 외부접속 이진수 실수표현 io stream return 0 성공 이유 윤성우의 열렬 TCP/IP 소켓 프로그래밍 실제 인터넷 속도 C++ connector mysql 방화벽 m1 페러렐즈 윈도우 맥 단축키 몬트레이 한영 전환 mysql 외부 Ip 오류 C2011 'timespec': 'struct' 형식 재정의 버퍼란 2진수와 Byte #define HAVE_STRUCT_TIMESPEC 네이버 페이 결제 네이버 포인트 적립 계산 네이버 맴버쉽 적립 독 속도 조절 M1 Parallels Ubuntu QT mariadb 외부접속 puts( ) 빅엔디안 우분투 독 에러 m1 매직 키보드 mariaDB 외부 접속 2진수 실수 표현 우분투 디스코드 c언어 스트림 MK293KH/A 리틀 엔디안과 빅 엔디안 효과적인 if 코드 mariadb 재설치 스트림 버퍼 connect() 이진수 음수표현 2진수 음수 표현 M1 dock speed pointer reference 2진법과 기수 Apple Silicon Mac용 터치아이디 탑재형 매직 키보드 - 미국 영어 (MK293KE/A) 네이버 맴버쉽 계산 if 코드 구조 A2449 c 알고리즘 c언어 버퍼 표준 입출력 스트림 socket 스트림과 버퍼 인터넷 속도 단위 몬트레이 Shift Space c# 클래스 fputs( ) M1 독 바로 보기 if 가독성 listen() socket networking if(0) 소켓 Visual Studio에서 inet_ntoa( ) 경고 MariaDB 방화벽 MK293KE/A ubuntu 포인터와 참조 네이버 제휴 통장 적립 db 방화벽 M1 dock 맥북 독 반응 window mysql
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31