문제 번역 : https://steemit.com/topcoder/@skshin/topcoder-ab


기본 소스도 준비 됐고, 컴파일 환경도 준비 됐으면, 구동시켜보자.

서버부터,
사용자 삽입 이미지

아주 간단하다.

클라이언트도 실행해 보자.
사용자 삽입 이미지

클라이언트도 간단하다.
사실은 몇 번의 실패 과정이 있었다. 컴파일만 해 보고, 뭐하는 프로그램(?)인지 몰라서...
소스의 설명을 보고 실행파일 명(rpipe)을 이해했다.
클라이언트에서, 서버로 명령을 보내서 수행한 결과를 클라이언트쪽에 보여주는 프로그램이다.

좀 복잡해 보이긴 해도, 꽤나 단순한 프로그램이다.

여기서 우리에게 필요한 내용을 서버쪽에 추가해야 한다.

필요한 명령어 목록을 정해보자.
(서버는 클라이언트의 명령에 의해서만 움직인다. 이렇게 하는 것이 나중에 제어하고 확장하기 쉬워진다. 자세한 것은 나중에 여력이 되면 다시 설명하기로 하고... 일단 넘어가자.)

참참참....

이 서버의 내용에 대해서 전혀 설명이 있었다.
이 서버는 숫자야구 게임 서버이다.

하는 역할은 다음과 같다.

1. 클라이언트의 접속을 받아 들인다. (당연히 네트웍 서버이므로)
2. 게임을 만든다. (서버가 숫자를 생각!하여 기억하고 있는다.)
3. 클라이언트에서 숫자가 오면 볼카운트를 확인해서 다시 돌려준다.
  3-1. 이때의 볼 카운트는 당연히 2의 과정에서 기억하고 있는 숫자와 3에서 넘어온 숫자를 비교한 볼카운트이다.
  3-2. 이 과정을 반복한다.
  3-3. 세자리 숫자를 기본으로 한다. 따라서 돌려주는 결과가 3S인 경우에는 서버에 횟수를 기록하게 된다.
  3-4. 기록을 할 때에는 클라이언트에서 제시한 이름을 기준으로 한다. 즉, 1의 과정 이후에 클라이언트에서 자신을 판별하는 이름을 보내야 기록이 된다는 것이다. (이름이 없으면 기록하지 않는다.)

대충 이 정도이다.
이러면 전송해야 할 문자열도 대충 정해진다.

* C->S : NAME <client name>
  - S->C : OK
* C->S : START
  - S->C : OK
* C->S : 123
  - S->C : 1S2B
.... (반복) ....
* C->S : 132
  - S->C : 3S0B 8    (8번만에 맞췄다.)

나머지 필요한 부분은 나중에 추가하기로 한다.
일단은 여기까지.
간단한 네트웍 서버를 만들 계획입니다.
목적은 간단합니다.
재미

재밌지 않다는 친구들이 몇 있었습니다.
그래서 그 친구들과 재밌는 일을 꾸며볼 수 있게 기반을 만들 겁니다.

이 서버는 그 작업을 위한 첫 단계입니다.

요구사항1
1. 간단한 리눅스 TCP서버
2. 인터넷 접속이 가능할 것
3. 테스트가 가능하게 TEXT데이터 전송할 것
4. 개인별기록을 남겨 둘 것
5. 인증기능 없음 (자유롭게 이용 가능, 단, 부하걸면 죽음!!!)

우선은 1단계 부터 진행할 계획. 진행하면서 더 필요한 것이 있으면 추가하지.
다음은 1단계 진행 후 확장할 내용. 언제인지는 모르겠지만...

요구사항2
1. DB(gdbm or mysql) 사용
2. Web Interface (CGI)
3. 실시간 통계
우선 기본이 되는 Socket Server를 찾는 것부터 시작했다.
(처음 부터 만들면 되긴 하지만, 조금 귀찮다. 괜찮은 서버를 하나 찾아서 수정하면서 시작하자.)

찾는 샘플의 조건:
1. blocking socket : 서버가 단순해 진다.
2. fork 버전 : 서버 관리및 운영이 단순해 진다.
3. 언어불문 : 가능하면 C/C++
4. client 테스트 버전이 있으면 우대(?)

구글링으로부터 시작했다.
socket sample
역시나 많이 나온다.
첫번째 자료를 본다.
훌륭하다.

흠... 아직 서버를 준비 안했다.
내부 서버를 만들어서 소스를 붙여 넣고 컴파일 한다.
http://www.cs.uic.edu/~troy/fall99/eecs471/socksample/samples.html

몇가지 문제가 있다.
C++소스긴 한데, cerr밖에는 C++이지 않다.
과감하게 C로 바꾼다.


줄이 좀 안맞는 것은 용서~~

테스트를 위한 클라이언트 소스도 있다.



여기에 Makefile만 있으면 컴파일 준비 완료


여기까지하면 기본적인 준비 완료.

보통 ext3로 포맷을 하게되면, 시간이 무지 오래 걸린다.
지금 하고 있는 프로젝트에서 사용하려고 하니, 하세월이다.

KLDP에 있는 Quick Format은 ext3가 아닌 ext2용 inode를 만들기 때문에, 금방 끝나긴 하지만, ext2로 mount해야한다.
더 좋은 방법(?)은 생성되는 inode의 수를 줄여준다. 물론, 파일을 많이 만들 수는 없다. 하지만 금방 끝난다...

1. e2fsprogs의 소스를 받아서,
2. misc/mke2fs.c의 main()위에 있는 PRS()함수를 찾는다.
3. 거의 아랫부분의 param.s_inodes_count의 값을 계산하기 바로 위에,
4. num_inodes = 1; reserved_ration = 1; 값을 강제적으로 세팅했다.
5. 결론적으로 원래 만들어 져야 할 inode의 수보다 1/512배 만큼의 inode가 만들어진다.

포맷도 빠르고, ext3를 사용할 수 있어서 좋다.
단점은 파일을 많이 만들 수 없다는 것...

VisualC++1.0이 처음 나온게 1993년(?)경으로 기억된다. 하지만, MFC의 버전은 2.0이었다. 즉, 그 이전의 버전부터 MFC는 존재 했었고, Visual C++과 버전이 일치하지 않았다.
이의 혼란으로 Visual C++ 3.0이 나오지 않고 바로 4.0이 나왔었다. 드디어 MFC버전 4.0과 딱 맞아 떨어졌다.
하지만, 이도 잠시, 계속해서 버전이 올라가는 VisualC++버전을 MFC버전이 따라가질 못했다. 어쩔 수 없이 다시 버전을 맞추기로 한다.
이번에는 MFC5.0을 건너뛰고, MFC6.0이다 하지만 dll은 여전히 mfc42.dll이다.
아마도 가장 오래 사용한 MFC Dll이 바로 mfc42.dll이었던 것 같다. 하지만, 이때에도 MFC버전은 6.0이었다.

그래서, 생각난 김에 MFC버전, MFC dll, Visual C++버전을 정리해 본다.

MFC 버전 Visual C++ 버전

1.0

Microsoft C/C++ 7.0

2.0

Visual C++ 1.0

2.5

Visual C++ 1.5

3.0

Visual C++ 2.0

3.1

Visual C++ 2.1

3.2

Visual C++ 2.2

4.0

Visual C++ 4.0

4.1

Visual C++ 4.1

4.2

Visual C++ 4.2

4.21(mfc42.dll)

Visual C++ 5.0

6.0(mfc42.dll)

Visual C++ 6.0

7.0(mfc70.dll)

Visual C++ .NET 2002

7.1(mfc71.dll)

Visual C++ .NET 2003

8.0(mfc80.dll)

Visual C++ 2005


결론적으로 Orcas는 MFC9.0이겠지? (아직 확인은 해보지 않았다.)

참고 : MSDN
역시나 KLDP에서 참조,
지난 번에 필요해서 찾을 때는 없더니...
여러가지 스크립트 언어와 연결가능 하다.

공식홈페이지 : http://www.swig.org
공식 문서 : http://www.swig.org/Doc1.3/SWIGDocumentation.html

php관련 참고
누군가가 문서보고 따라 해본 결과 : http://www.dabeaz.com/cgi-bin/wiki.pl?SwigFaq/PhP

나중에 긴히 써먹을 수 있을 것 같다.
C의 Exception 처리 라이브러리란다.
나중에 시간나면 확인해 보기로 하고 일단 링크만 걸어둔다.
http://users.footprints.net/~kaz/kazlib_doc/node161.html

평소엔 그냥 그렇게 지내오던 것이지만, KLDP의 질문을 보고 확실히 정리해 둘 필요가 있어서 정리해 둔다.
자세한 것은 메뉴얼을 참고.

U (up-to-date)
local에서 지워 졌거나 아주 오래(?)된 파일이라 전체를 서버로 부터 다시 받았다.
P (patch)
U와 비슷하나, 전체를 다시 받은 것이 아니라 변경부분만 다시 받았다. 말그대로 patch
A (add)
local에서 add해 둔 파일이다. 실제 서버에는 방연되어 있지 않다. commit 해야만 서버에 반여된다.
R (remove)
local에서 remove해 둔 파일이다. A와 마찬가지로 실제 서버에는 반영되어 있지 않다.
M (modify)
local에서 수정된 파일이다. 경우에 따라서는 서버의 파일과 merge된 경우도 있다.
C (conflict)
M의 경우 중, 같은 부분이 local에서도 수정되고 서버에서도 수정되어 있는 경우에 conflict가 발생한다. "<<<<", "====", ">>>>" 로 표시되는 중복된 부분을 확인해서 반드시 conflict를 해소해야 한다.
? (unknown)
local에 있는 파일 중, cvs에 등록되어 있지 않는 파일이다. add가 필요하다면 참고할 수 있으나 아니면 무시.


이 부분 중에서 제일 중요한 것이 "C(conflict)"이다. 다른 것은 모두 무시해도 된다. 하지만, "C"는 반드시 해소(수정)하고 넘어가야 한다.
에너지 절약을 강화하는 차원에서 미주를 비롯한 몇몇 국가에서는 내년(2007년)부터 DST(Daylight Saving Time; 일광절약시간제, 우리는 흔히 섬머타임이라고 알고 있음) 일부를 변경합니다.
즉, 시작일이 3주정도 앞당겨 지고, 종료일이 1주정도 늦춰집니다.

리눅스에는 오래전(?)에 반영되어 현재 배포본이나 각 배포본의 자동업데이트를 통해 이미 반영되어 있으며, Windows는 hotfix를 통해 반영된다. 하지만 자신이 속한 영역이 아니면, 중요업데이트가 아니라 자동으로 업데이트 되진 않으니 확인해서 수정해 줘야 합니다.

변경되는 내용은 다음 사이트에서 확인하면 됩니다.

http://support.microsoft.com/kb/928388

기본적으로 다음에서 다루고 있습니다.

http://www.microsoft.com/windows/timezone/dst2007.mspx

참고들 하세요.

<EOB>

+ Recent posts