개요패킷을 보낼 때는 해당 패킷의 내용과 관계없이 send함수를 호출해서 패킷을 보내기만 하면 된다. 하지만 패킷을 받을 때는 상황이 좀 다르다. 받은 패킷이 어떤 패킷이냐에 따라 호출할 함수 또는 수행할 연산 등이 달라지므로, 그 때 그 때 적절한 동작을 수행할 수 있도록 만들어 주어야 한다.고민을 하던 중 cocos2d-x 엔진의 KeyboardListener가 생각이 났다. KeyboardListener는 내 class의 instance를 등록시켜 놓으면 내 class에 있는 KeyboardListener함수로 callback이 되도록 구성되어있다.덕분에 key event들을 한곳에서 처리하지 않고 필요한 객체에서 따로 처리할 수 있다.SocketListener를 구현해 보자.수신받은 패킷에서 꼭 ..
개요socket으로 네트워크 엔진 만들기 (1) 에서 만든 패킷을 활용하기 위해서 socket이 제공하는 함수들을 사용할 수도 있지만Packet을 보내거나 읽고, 읽은 내용을 파싱하여 필요한 함수를 호출할 수 있도록 하는 등 여러 기능들을 추상화시킨 class가 있으면 사용하기 편할 것이다.NetworkManager class를 만들어 보자.NetworkManager class의 이름은 network를 가장 잘 manage하는 생물인 Spider로 하자. network를 가장 잘 manage하는 사람 Spider - socket을 생성하고 연결하기Spider는 싱글톤으로 구현되어 프로그램에 유일하게 존재하며, 하나의 socket을 가지고 통신한다. 사용자는 ip, port를 설정하는 것으로 서버 또는 다..
개요socket에 대해 공부하다가 이 socket을 가지고 게임을 만들어보자는 생각이 들었다. 환경이 열악해서 상용 네트워크 엔진을 사용할 수 없기도 하고 배운 내용을 정리도 할 겸 처음부터 만들어보기로 했다. socket을 사용하는 네트워크 엔진을 만들어보자. 엔진은 c++로 작성하며, 기본적인 구성은 팩토리 패턴으로 생성할 수 있는 Packet class, 만들어진 Packet을 전송하는 Manager class 등이다. PacketPacket class는 기본적으로 함수 ID, parameter의 크기, parameter set의 갯수를 int형으로 가지고 있다.함수의 parameter들은 문자열 형태로 저장함으로써 여러 종류의 parameter에 대응할 수 있도록 추상화시킨다. 1234567891..
socket으로 기본적인 서버 프로그램을 만들어보자.프로그램은 하나의 클라이언트를 처리하며, 받은 데이터를 다시 클라이언트에게 전달하는 echo기능을 수행한다. #include #include #include #include #include #include #define BUF_SIZE 1024 int main(){ int server_socket, client_socket; int client_len, n; char buf[BUF_SIZE]; struct sockaddr_in client_addr, server_addr; client_len = sizeof(client_addr); // 소켓을 생성한다. if((server_socket = socket(AF_INET, SOCK_STREAM, IPPROT..
socket을 사용해서 네트워크 프로그램을 만들려면 socket을 만들어야 한다. 먼저 Linux에서 사용되는 BSD socket(이하 socket) 을 만드는 방법을 알아보자. socket을 만드는 함수는 socket() 함수이다. int socket(int domain, int type, int protocol); domain소켓을 어떤 영역에서 사용할 것인지에 대한 정보이다. AF_UNIX 시스템 내부에서 프로세스간 통신할 때 사용한다. AF_INET IPv4를 사용해서 인터넷 영역에서 통신할 때 사용한다. AF_IPX Novell Internet 프로토콜이지만 이제 사용하지 않는다. AF_INET6 IPv6를 사용해서 인터넷 영역에서 통신할 때 사용한다. AF_X25 아마추어 라디오용 프로토콜이다..
인터넷은 프로그램과 프로그램이 서로 연결되어 이루는 네트워크다.socket 계층네트워크 프로그램 개발을 위한 TCP/IP 4계층에서 더 추상화 해서 만들어진 계층이다. 프로그래머를 위해 만들어진 계층으로 소켓 계층은 소켓 함수 라이브러리를 말하며, 소켓 프로그래밍이란, 이 라이브러리를 사용해서 프로그래밍 하는 것을 말한다. 버클리 소켓(BSD 소켓)1989년에 버클리 대학에서 만들어져서 이름이 버클리 소켓이다. BSD 소켓 이라고도 부른다. C언어로 만들어졌으며 자유롭게 사용할 수 있어서 네트워크 프로그램에서 가장 범용적으로 사용되고 있다. 일반적으로 socket이라고 하면 BSD 소켓을 말한다.소켓은 프로그램과 프로그램을 연결하는 도구로, 현실 세계에서 가전제품이 소켓으로 연결되어있는 것과 비슷하여 소..
여러 객체가 서로 정보를 교환하는 것을 네트워크(Network) 라고 한다. 네트워크를 컴퓨터와 컴퓨터로 구성한 것을 인터넷(Internet) 이라고 한다.IP(Internet Protocol)전 세계 수억대의 컴퓨터가 인터넷을 하기 위해서는 서로의 정체를 알 수 있도록 특별한 주소를 부여했는데 이 주소를 IP주소라고 한다.Internet Protocol의 줄임말로, 인터넷에서 컴퓨터의 위치를 찾아서 데이터를 전송하기 위해 지켜야 할 규약이다. IP는 4개의 숫자로 구성되며 숫자의 크기에 따라 IPv4(32비트, 각 숫자는 1바이트), IPv6(128비트, 각 숫자는 4바이트)로 나뉜다.일반적으로 IPv4는 10진수로 표현하며 각 자리는 .으로 구분하고, IPv6는 각 자리를 4자리 16진수로 표현하며 ..
프로그램이 수행해야 할 일서버클라이언트로부터 메세지를 수신해서 다른 클라이언트들에게 뿌려주는 단순한 echo 기능을 수행한다.클라이언트콘솔 화면에서 메세지를 입력받아서 서버로 송신하며, 동시에 서버에서 수신받은 메세지를 화면에 출력한다. 서버리눅스에도 있는 select를 사용해서 각 소켓의 메세지를 수신하고 송신할 수 있지만 winsock에서는 더 사용하기 편하고 강력한 기능을 제공하는 WSAEventSelect를 사용하기로 한다. 클라이언트서버에서 WSAEventSelect를 사용하여 멀티플렉싱을 구현하였기 때문에 클라이언트에서도 해당 함수를 사용해서 stdin과 소켓의 멀티플렉싱을 구현하려 했으나 windows는 socket과 file을 다르게 관리하기 때문에 위 함수를 사용할 수 없었다.아래는 멀티..
- Total
- Today
- Yesterday
- C++
- C/C++
- OS
- game
- rxswift
- 알고리즘
- DesignPattern
- SHADER
- mongoDB
- SOCKET
- C
- ue4
- Git
- ios
- swift
- winsock
- Spring
- JSP
- Cocos2d-x
- scala
- 수학
- 자료구조
- 드라마
- 국내여행
- database
- 운영체제
- machine learing
- SwiftUI
- Java
- 데이터베이스
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |