자료참고: http://dakuo.tistory.com/159
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 32 33 34 35 36 37 38 | #include <stdio.h> #include <stdlib.h> #include <string.h> #include <WinSock2.h> #pragma comment(lib,"ws2_32.lib") #define IP "221.151.187.115" #define PORT 80 #define BUFSIZE 1024 int main() { WSADATA wsaData; SOCKET client; SOCKADDR_IN serveraddr; char buf[BUFSIZE]; WSAStartup(MAKEWORD(2, 2), &wsaData); printf("WSAStartup : %d\n", WSAGetLastError()); client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); printf("socket : %d\n", WSAGetLastError()); serveraddr.sin_family = AF_INET; serveraddr.sin_port = htons(PORT); serveraddr.sin_addr.S_un.S_addr = inet_addr(IP); connect(client, (SOCKADDR*)&serveraddr, sizeof(serveraddr)); strncpy_s(buf, "GET / HTTP/1.1\nHost:www.kim82536.pe.kr\n\n",41); send(client, buf, 1024, 0); memset(buf, 0, 1024); recv(client, buf, 1024, 0); printf("echo data : \n%s\n", buf); WSACleanup(); } | cs |
[+] windows.h 와 winsock2.h 헤더가 중복되는 부분이 있어서 winsock2.h 를 windows.h 보다 먼저 include 해주어야 함.
WSAStartup() 함수 후,
serveraddr 구조체 초기화 후에
connect, bind 등의 함수 사용.
필요헤더 : winsock2.h
라이브러리: ws2_32.lib
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
--> 윈속 관련 라이브러리를 초기화하고, 그 데이터를 WSADATA 에 넣어줌.
wVersionRequested --> 프로그래머가 사용할 윈속의 버전 정보
(MAKEWORD() 등으로 전달. 아니면 WORD 데이터 등으로 전달 함)
lpWSAData --> WSADATA 형 구조체의 주소값
MAKEWORD 의 인자값 별 반환값
MAKEWORD(1,2): return 0x0201 --> 주 버전 1, 부 버전 2
MAKEWORD(1,2): return 0x0202 --> 주 버전 2, 부 버전 2
int WSACleanup(void);
--> 윈속 관련 라이브러리를 해제할 때 사용
성공 시 0 반환,
실패 시 SOCKET_ERROR 반환
'전공 과목 시험정리 > C 프로그래밍' 카테고리의 다른 글
모듈용 윈도우 C 소켓 (0) | 2015.05.10 |
---|---|
C와 C++ 동시사용 (0) | 2015.05.10 |
C++ 에서의 소켓프로그래밍 (0) | 2015.04.25 |
Fate 서버 소스 (미완성) (0) | 2015.04.25 |
fork 로 프로세스 생성 후, 프로세스간 변수 공유 (0) | 2015.04.25 |