[6.0] Winsock Control 없이 API로 소켓 구현하기 - 초기화 (2)
이 강좌는 Microsoft Winsock Control 6.0 (이하 Winsock 컨트롤)의 사용 없이, api 만으로
소켓을 구현하는 방법에 대해 서술하겠습니다. 강좌 중간에 편의상 경어체로 표기되는 부분도 있을 수 있으므로 양해바랍니다.
- 이 강좌에서는 소켓 버젼 Winsock 2.2를 기준으로 설명하겠습니다.
- Winsock 2.2는 Windows 95 상위 버젼에서는 모두 동작하므로, 거의 모든 시스템에서 동작한다 할 수 있겠습니다.
- 소켓의 초기화
소켓을 사용하기 위해 소켓을 초기화합니다. 이 때 사용되는 api는 WSAStartup(); API입니다.
Declare Function WSAStartup Lib "ws2_32.dll" (ByVal wVersionRequired As Integer, ByRef lpWSAData As WSADATA) As Long
- wVersionRequired : 'WORD' 형 정수(2바이트 정수)로, 소켓의 버젼을 나타냅니다. 2.2버젼을 사용할때에는 &H202를 대입합니다.
- lpWSAData : WSADATA 구조체를 대입합니다. (초기화 정보를 받기 위함.)
- 반환값: 0 - 성공, 0이 아닌값 - 실패
- 소켓의 사용 반환
WSACleanup() API는 WS2_32.DLL의 사용을 시스템에게 반환합니다.
Declare Function WSACleanup Lib "ws2_32.dll" () As Long
- 성공시 0을 반환, 0이 아닌 값 - 실패 (WSACleanup은 실패할 일이 거의 없습니다.)
* 소켓을 초기화하고 바로 반환하는 짤막 Code
소켓을 사용하기 전에 해야할 초기화, 그리고 사용 후에 해야하는 사용반환 작업.
Code로 살펴볼까요?
Type WSADATA wVersion As Integer wHighVersion As Integer szDescription As String * 257 szSystemStatus As String * 129 iMaxSockets As Integer iMaxUdpDg As Integer lpVendorInfo As Long End Type Declare Function WSAStartup Lib "ws2_32.dll" (ByVal wVersionRequired As Integer, ByRef lpWSAData As WSADATA) As Long Declare Function WSACleanup Lib "ws2_32.dll" () As Long
Sub Main() Dim ret As Long, wsData As WSADATA ret = WSAStartup(&H202, wsData) If ret Then MsgBox "소켓 초기화에 실패했습니다.", vbCritical, "WSAStartup" Exit Sub End If WSACleanup End Sub
|
작성자 : 수학쟁이(NAVER)
첫댓글 앗... 잊혀질뻔한 소스였네요. ^^;;; 다시금 기억하게 되니 좋네요 ㅋ.
잘봣습니다~
잘봣습니다~
잘봣습니다~
잘봣습니
잘봣습니
잘봣습니
잘봣습니
잘봣습니다~
잘봣습니다~