ProjectVirush/Rule을 만족하는 것처럼 보이는 프로토타입을 만든다.
지역 단위로 이름, 숙주 개체수, 기본 항체 보유량, 특정 바이러스 개체수와 그에 해당하는 습득 항체 보유량을 가진다.
지역 간 랜덤한 숫자의 숙주 이동이 일어난다.
바이러스는 증식 속도, 잠복기, 독성을 가진다. 이는 시간에 관한 함수(f(t))이다.
Client Framework ¶
~cpp
//Project -> Setting -> LINK 메뉴 -> Object/library modules: 의 끝부분에 ws2_32.lib 를 추가한다.
#include <stdio.h>
#include <winsock2.h>
#define PORT 9999 // 서버의 9999번 포트를 연다
#define BACKLOG 5
#define SERVER_IP "127.0.0.1"
void error(char *buf)
{
puts(buf), exit(1);
}
main(){
WSADATA wsaData;
SOCKET server_sock; // 서버의 socket을 생성
SOCKADDR_IN server_addr; // 네트워크의 정보를 담을 structure 생성.
char msg[] = "My name is Na Hwidong,.";
char question[200];
int queslen;
if( WSAStartup(MAKEWORD(2,2), &wsaData) == -1 )
error("WSAStartup Error");
// socket 설정
// 프로그래머는 이것을 통해 네트워크와 대화를 한다.
server_sock = socket(AF_INET, SOCK_STREAM, 0);
if( server_sock == -1 )
error("server socket error");
// 네트웍 정보 설정
// 이것은 프로그램이 socket과 연결할 정보를 담고있다.
memset((SOCKADDR_IN *)&server_addr, 0, sizeof(SOCKADDR_IN));
// struct sockaddr_in -> SOCKADDR_IN
server_addr.sin_family = AF_INET;
server_addr.sin_addr.s_addr
= inet_addr(SERVER_IP); // 로컬 주소로 설정한다.
server_addr.sin_port = htons(PORT);
// 서버에 연결한다. 시도나 해보자.
if( connect(server_sock,
(struct sockaddr *)&server_addr,
sizeof(struct sockaddr)) == -1 )
fprintf(stderr, "서버에 connect 할 수 없습니다."), exit(1);
for( int i = 0 ; i < 3 ; i++ ){
// 연결하고 뭘 해야지 그냥 있었네..;;
queslen = recv( server_sock, question, sizeof(question), 0);
question[queslen] = '\0';
printf( "I have to answer the next question. %s\n", question);
if( send(server_sock, msg, sizeof(msg), 0) == -1 )
fprintf(stderr, "send error");
printf( "I sent an answer. The answer is %s\r\n", msg);
system("pause");
}
WSACleanup();
exit(0);
// exit로 종료를 하면 모든 파일 디스크립터를 자동으로 닫고 종료한다.
}