League Of Legends - Link Select [01] ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ์†Œ์ผ“
๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿค“ Study/TCP-IP

[01] ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ ์†Œ์ผ“

by GAMEMING 2024. 3. 18.
728x90

 

 

์œค์„ฑ์šฐ์˜ ใ€Œ์—ดํ˜ˆ TCP/IP ์†Œ์ผ“ ํ”„๋กœ๊ทธ๋ž˜๋ฐใ€์„ ํ† ๋Œ€๋กœ ๊ณต๋ถ€ํ•˜์—ฌ ์ž‘์„ฑ๋˜์—ˆ์Œ.

 


 

 

 

  • ๋„คํŠธ์›Œํฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

: ์„œ๋กœ ๋‹ค๋ฅธ ๋‘ ์ปดํ“จํ„ฐ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๊ฒƒ !

: ๋ฌผ๋ฆฌ์ ์ธ ์—ฐ๊ฒฐ์ด ํ•„์š”ํ•˜๋‚˜ "์ธํ„ฐ๋„ท"์ด ์กด์žฌ

: ์†Œํ”„ํŠธ์›จ์–ด์ ์ธ ์—ฐ๊ฒฐ์€ ์šด์˜์ฒด์ œ์—์„œ ์กด์žฌํ•˜๋Š” ์†Œ์ผ“(Socket) ์‚ฌ์šฉ

 

 

 

  • TCP์†Œ์ผ“์€ ์ „ํ™”๋ง๊ณผ ๋น„์Šทํ•˜๋‹ค

 

1. ์†Œ์ผ“ ์ƒ์„ฑ ํ•จ์ˆ˜ (์ „ํ™”๋ฅผ ๋ฐ›์œผ๋ ค๋ฉด ์ „ํ™”๊ธฐ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ, ์†Œ์ผ“์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ์†Œ์ผ“์„ ๋งŒ๋“ค์–ด์•ผ ํ•จ)

#include <sys/socket.h>
int socket(int domain, int type, int protocol);                             // ์„ฑ๊ณต ์‹œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ, ์‹คํŒจ์‹œ -1 ๋ฐ˜ํ™˜
 

- ์„œ๋ฒ„ -

2. bindํ•จ์ˆ˜ (์ „ํ™”๋ฒˆํ˜ธ ๋ถ€์—ฌ์— ๋น„์œ ๋จ, IP์™€ ํฌํŠธ๋ฒˆํ˜ธ ๊ฐ™์€ ์†Œ์ผ“ ์ฃผ์†Œ ์ •๋ณด ํ• ๋‹นํ•จ)

#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *myaddr, socklen_t *addrlen);        // ์„ฑ๊ณต ์‹œ 0, ์‹คํŒจ์‹œ -1 ๋ฐ˜ํ™˜
 

3. listenํ•จ์ˆ˜ (์ „ํ™”๋ฅผ ๋ฐ”๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ์—ฌ์•ผ ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์†Œ์ผ“๋„ ์—ฐ๊ฒฐ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ์—ฌ์•ผ ํ•จ)

#include <sys/socket.h>
int listen(int sockfd, int backlog);                                        // ์„ฑ๊ณต ์‹œ 0, ์‹คํŒจ์‹œ -1 ๋ฐ˜ํ™˜
 

4. acceptํ•จ์ˆ˜ (์ˆ˜ํ™”๊ธฐ๋ฅผ ๋“œ๋Š” ๊ฒƒ์— ๋น„์œ ๋˜๋Š”, ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์„ ์œ„ํ•œ ์—ฐ๊ฒฐ ์š”์ฒญ์„ ์ˆ˜๋ฝํ•˜๋Š” ๊ฒƒ)

#include <sys/socket.h>
int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);          // ์„ฑ๊ณต ์‹œ ํŒŒ์ผ ๋””์Šคํฌ๋ฆฝํ„ฐ, ์‹คํŒจ์‹œ -1 ๋ฐ˜ํ™˜  
 

- ํด๋ผ -

2. connectํ•จ์ˆ˜ (์ „ํ™”๋ฅผ ๊ฑฐ๋Š” ๊ฒƒ, ์ฆ‰ ์—ฐ๊ฒฐ์„ ์š”์ฒญํ•˜๋Š” ํ•จ์ˆ˜)

#include <sys/socket.h>
int connect(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen);     // ์„ฑ๊ณต ์‹œ 0, ์‹คํŒจ์‹œ -1 ๋ฐ˜ํ™˜
 

 

 

 

  • ์œˆ๋„์šฐ ๊ธฐ๋ฐ˜ ์†Œ์ผ“ ํ•จ์ˆ˜
#include <winsock2.h>

int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);     // ์„ฑ๊ณต ์‹œ 0, ์‹คํŒจ ์‹œ 0์ด ์•„๋‹Œ ์—๋Ÿฌ ์ฝ”๋“œ ๊ฐ’ ๋ฐ˜ํ™˜
  // ์ฒซ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ : ์†Œ์ผ“ ๋ฒ„์ „  - MAKEWORD(1, 2) MAKEWORD(2, 2)
  // ๋‘ ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜ : WSADATA ๊ตฌ์กฐ์ฒด ๋ณ€์ˆ˜์˜ ์ฃผ์†Œ ๊ฐ’์„ ์ธ์ž๋กœ ์ „๋‹ฌ

int WSACleanup(void);                                            // ์„ฑ๊ณต ์‹œ 0, ์‹คํŒจ ์‹œ SOCKET_ERROR ๋ฐ˜ํ™˜

SOCKET socket(int af, int type, int protocol)                    // ์„ฑ๊ณต ์‹œ ์†Œ์ผ“ ํ•ธ๋“ค, ์‹คํŒจ ์‹œ INVALID_SOCKET ๋ฐ˜ํ™˜
int bind(SOCKET s, const struct sockaddr* name, int namelen);    // ์„ฑ๊ณต ์‹œ 0, ์‹คํŒจ ์‹œ SOCKET_ERROR ๋ฐ˜ํ™˜
int listen(SOCKET s, int backlog);                               // ์„ฑ๊ณต ์‹œ 0, ์‹คํŒจ ์‹œ SOCKET_ERROR ๋ฐ˜ํ™˜
SOCKET accept(SOCKET s, struct sockaddr* addr, int* addrlen);    // ์„ฑ๊ณต ์‹œ ์†Œ์ผ“ ํ•ธ๋“ค, ์‹คํŒจ ์‹œ INVALID_SOCKET ๋ฐ˜ํ™˜

int connect(SOCKET s, const struct sockaddr* name, int namelen); // ์„ฑ๊ณต ์‹œ 0, ์‹คํŒจ ์‹œ SOCKET_ERROR ๋ฐ˜ํ™˜
int closesocket(SOCKET s);                                       // ์„ฑ๊ณต ์‹œ 0, ์‹คํŒจ ์‹œ SOCKET_ERROR ๋ฐ˜ํ™˜

int send(SOCKET s, const char* buf, int len, int flags);         // ์„ฑ๊ณต ์‹œ ์ „์†ก๋œ ๋ฐ”์ดํŠธ ์ˆ˜, ์‹คํŒจ ์‹œ SOCKET_ERROR ๋ฐ˜ํ™˜
// ์ „์†ก ๋Œ€์ƒ๊ณผ์˜ ์—ฐ๊ฒฐ์„ ์˜๋ฏธํ•˜๋Š” ์†Œ์ผ“ ํ•ธ๋“ค ๊ฐ’, ์ „์†กํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๋ฒ„ํผ ์ฃผ์†Œ๊ฐ’, ์ „์†ก ๋ฐ”์ดํŠธ ์ˆ˜, ๋ฐ์ดํ„ฐ ์ „์†ก ์˜ต์…˜

int recv(SOCKET s, const char* buf, int len, int flags);         // ์„ฑ๊ณต ์‹œ ์ „์†ก๋œ ๋ฐ”์ดํŠธ ์ˆ˜, ์‹คํŒจ ์‹œ SOCKET_ERROR ๋ฐ˜ํ™˜