본문 바로가기

전공 과목 시험정리/C 프로그래밍

모듈용 윈도우 C 소켓

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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <WinSock2.h>
 
#pragma comment(lib,"ws2_32.lib")
 
#define BUFSIZE 1024
 
int senddata(int PORT, char IP[],char data[]);
 
int main() {
    /*
        int senddata(
            int PORT,
            char IP[],
            char data[]
        );
        에러가 없으면 0 반환.
        에러 발생 시 에러값 반환. (int 형)
    */
 
    if (0 != senddata(80"221.151.187.115""GET / HTTP/1.1\nHost:www.kim82536.pe.kr\n\n")){
        printf("Error!\n");
    }
 
}
 
int senddata(int PORT,char IP[],char data[]) {
    WSADATA wsaData;
    SOCKET client;
    SOCKADDR_IN serveraddr;
    char buf[BUFSIZE];
    int errorcode;
 
    WSAStartup(MAKEWORD(22), &wsaData);
    errorcode = WSAGetLastError();
    if (0 != errorcode)    return errorcode;
    
    client = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    errorcode = WSAGetLastError();
    if (0 != errorcode)    return errorcode;
 
    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));
 
    send(client, data, 10240);
 
    memset(buf, 01024);
    recv(client, buf, 10240);
    printf("echo data : \n%s\n", buf);
 
    WSACleanup();
    return 0;
}
cs



한번 connect 후에 send(), recv() 하는 것이 더 편하겠지만 일단 모듈형으로 하기 위해서 

이렇게 짜보았다.


buf 를 전역변수로 선언해서 값을 받아오던가, 포인터를 사용해서 값을 반환해주면 될 듯 하다.