<Client>

 

5. Server 연결. (Server에 전화 걸기.)

 · SOCKADDR_IN 구조체 선언. (주소 패밀리와 IP, 포트 번호를 쉽게 참조할 수 있도록 만들어진 구조체)

 · connect 함수 호출. (Server에 접속 요청)

 

  - SOCKADDR_IN 구조체

   sin_family : 프로토콜 체계를 정의한다. (인터넷 기반 [IPv4]의 경우는 AF_INET)

   sin_addr : Server의 IP 주소 정보를 넣어준다.

   sin_port : Server의 Port 정보를 넣어준다.

 

  - connect 함수

   Parameter 1 : 미리 생성한 socket을 넣어준다.

   Parameter 2, 3 : 미리 생성한 SOCKADDR_IN 구조체 정보를 넣어준다.

 

   Return : 정상적으로 연결되지 않을 경우 SOCKET_ERROR 값을 반환한다. (winsock2.h에 상수값으로 정의되어 있음.)

 

1
2
3
4
5
6
7
8
9
10
11
12
13
    SOCKADDR_IN ServerInfo;
 
    ServerInfo.sin_family = AF_INET;
    ServerInfo.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
    ServerInfo.sin_port = htons(2011);
    
    int Result = connect(m_Socket, (SOCKADDR*)&ServerInfo, sizeof(ServerInfo));
    if(Result == SOCKET_ERROR)
    {
        closesocket(m_Socket);
        WSACleanup();
        return false;
    }
cs

 

6-1. Data 송신 (Server에게 말하기)

 · send 함수 호출. (Block 함수이므로 해당 일이 끝날때까지 리턴되지 않고 대기한다.)

 

  - send 함수

   Parameter 1 : 미리 생성한 socket을 넣어준다.

   Parameter 2 : 보낼 Data를 넣어준다. (char형의 포인트이므로 구조체던지 int형이던지 적절한 캐스팅 연산자를 사용해 어떤 데이터든지 보낼 수 있다.)

   Parameter 3 : Parameter 2의 크기.

   Parameter 4 : 함수 호출 시에 여러가지 옵션을 설정할 수 있다. (특별한 옵션을 주지 않으면 0을 넣어준다.)

 

   Return : 정상 송신 시 데이터를 보낸 양만큼의 Byte 크기를 반환 / 에러 발생 시 SOCKET_ERROR를 반환.

 

6-2. Data 수신 (Server의 말 듣기)

 · recv 함수 호출. (Block 함수이므로 해당 일이 끝날때까지 리턴되지 않고 대기한다.)

 

  - recv 함수

   Parameter 1 : 미리 생성한 socket을 넣어준다.

   Parameter 2 : Data를 담을 Bufer를 넣어준다. 
                     (char형의 포인트이므로 구조체던지 int형이던지 적절한 캐스팅 연산자를 사용해 어떤 데이터든지 받을 수 있다.)

   Parameter 3 : Server로부터 받을 Data의 크기를 모르기 때문에 넉넉히 잡아주는 것이 좋다.

   Parameter 4 : 함수 호출 시에 여러가지 옵션을 설정할 수 있다. (특별한 옵션을 주지 않으면 0을 넣어준다.)

 

   Return : 정상 수신 시 받은 데이터 양만큼의 Byte 크기를 반환 / 에러 발생 시 SOCKET_ERROR를 반환.

 

* Block 함수 주의점 (send, recv, accept 함수)

  Server 측에서 어떤 Client에게 데이터를 전행할 때, Client 측에서 recv함수로 Server가 보낸 Data를 받지 않는다면 대기 상태로 들어가게 된다.

  send, recv 함수는 해당 동작이 끝날때까지 리턴되지 않고 대기하는 Block 함수이기 때문이다.

  Block 함수를 사용할 때는 Server & Client 프로그램 간의 실행구조를 잘 생각해야 한다.

 

 

 

'Programming > Socket' 카테고리의 다른 글

[API] 소켓 통신 2 <Server/Client 공통>  (0) 2017.05.22
[API] 소켓 통신 1 <Server/Client 흐름도>  (0) 2017.05.22

+ Recent posts