서버는, 클라이언트로부터 메시지를 받아서 처리를 해줄 수 있는 콘솔 앱이 되겠습니다.
서버 앱이 main 함수에서, Proud.CNetServer 객체를 만듭시다.
본 튜토리얼에서는 include 구문 사용 등 여타 내용에 대해서는 생략하여 서술하고 있습니다. 생략된 내용까지 모두 포함하고 있는 최종 결과물은 ProudNet/Sample/Simple 폴더에 있습니다.
int main(int argc, char* argv[]) { // Network server instance. shared_ptr<CNetServer> srv(CNetServer::Create()); CStartServerParameter p1; p1.m_protocolVersion = g_Version; // This must be the same to the client. p1.m_tcpPorts.Add(g_ServerPort); // TCP listening endpoint ErrorInfoPtr err; try { // Starts the server. // This function throws an exception on failure. // Note: As we specify nothing for threading model, // RMI function by message receive and event callbacks are // called in a separate thread pool. // You can change the thread model. Check out the help pages for details. srv->Start(p1); } catch (Exception &e) { cout << "Server start failed: " << e.what() << endl; return 0; } while (true) { // get user input cin >> userInput; } ... }
위 소스에서 사용되는 protocol version과 server port는 클라이언트에서도 공유하는 값이어야 합니다. 따라서 두 변수는 Common 프로젝트에 다음과 같이 선언합니다.
// Protocol version that you define. // Your server app and client app must have the same value below. PNGUID guid = { 0x3ae33249, 0xecc6, 0x4980, { 0xbc, 0x5d, 0x7b, 0xa, 0x99, 0x9c, 0x7, 0x39 } }; Guid g_Version = Guid(guid); // TCP listening port number. int g_ServerPort = 33334;
이때 위 guid는 Visual Studio의 Guid Generator를 이용해서 새로 넣어주는 것이 더 안전합니다. Guid Generator는 'Visual Studio의 도구->GUID 만들기'를 선택하면 됩니다. (참고: 7. Starting a server)