2011-11-18 2 views
1

Access .mdb 데이터베이스 파일을 사용하여 변수를 저장하는 C# 게임을 설계했습니다.LAN을 통해 작동하도록 데이터베이스가있는 C# 프로그램을 배포 할 때의 조언

기본 아이디어는 플레이어 중 하나가 게임을 호스팅하고 다른 플레이어가 데이터베이스에 연결하여 항목을 데이터베이스에 읽고 쓰는 것으로 게임에 참여한다는 것입니다. 데이터베이스는 호스트와 클라이언트 사이에 변수를 전달하기 위해 필요하며, 두 프로그램 모두 새로운 메시지/변수를 정기적으로 데이터베이스에서 확인합니다 (예, 예, TCP/IP Remoting을 사용할 수 없습니다).

이제 클라이언트는 데이터베이스 파일을 찾을 수있는 한 호스트가 로컬 데이터베이스 만 수정하므로 대부분 클라이언트가 작동합니다. 현재 클라이언트의 연결 문자열은 .ini 파일에 있으며 프로그램이 작동하려면 서버 (또는 적어도 서버)가 XP 시스템의 공유 문서에 있어야합니다. Vista/7 컴퓨터.

그러나

다음 몇 가지 질문이 나에게 발생

  1. 어떤 클라이언트 사용자 장소 /가 공유/공공 문서에서 다른 폴더로를 설치하는 경우? 데이터베이스의 경로를 찾기 위해 공유 문서 폴더에 '드릴'할 수있는 코드가 있다고 가정합니다. 포함 된 이름은 ... 포함되어 있습니까?

  2. 설치는 어떻게됩니까? 설치 프로그램 기본값은 항상 "C : \ Program Files \ GameName"입니다. 그것은 기본적으로 공유/공개 문서에 특정 폴더로 설정 (또는 잠김) 될 수 있습니까? 그리고 공유 폴더에 설치하는 것이 좋습니다, 우발적 인 삭제와 같은 문제는 무엇입니까?

  3. 이렇게 말하면 기본값은 "C : \ Program Files \ GameName"입니다. 모든 클라이언트는 다른 컴퓨터의 동일한 경로를 볼 것이기 때문에 설치 경로를 설정하면 연결 문제를 해결할 수 있으며 XP 또는 Vista인지 여부는 중요하지 않습니다. "C : \ Program Files \ GameName"은 시스템 수정없이 LAN을 통해 C# 프로그램에 액세스 할 수 있습니까? 보안 (UAC?) 문제가 있습니까?

P. 사람들이 쉽게 찾을 수있는 세부 정보 : Visual Studio 2005를 사용하고 있습니다. 내 학교도 마찬가지입니다. .NET Framework 2.0을 실행 중입니다. 나도 학교 다. 불행하게도 나는 그것을 바꿀 수 없다.

+1

SQLite는 http://code.google.com/p/csharp-sqlite/를 사용할 수 위의 제안으로 모든 "공유"등이 발생하는 문제, 파일 잠금의 overcomplicated 설치 과정, SQL 서버 익스프레스 또는

당신을 제거 할 어떤 당신 미쳤어. 도랑 접근. 데이터베이스에 직접 클라이언트 액세스를 버립니다. 잠시 시간을내어 데이터를 올바르게 표시하는 방법을 배우십시오 (예, 아마도 웹 서비스를 통해). 게임에 도구를 사용하고 데이터를 올바르게 처리하는 방법을 배우면서 조금만 지출하면 엄청난 이익을 얻을 수 있습니다. – spender

+0

직접 소켓이 도달 범위를 넘어선다고 느껴지면이 레이어를 부탁하고 추상화하십시오. IE는 이러한 메시지를 얻기 위해 프로그램 할 인터페이스를 만듭니다. 나중에 소켓이 생각만큼 나쁘지 않다고 생각하면 구현을 간단히 바꿀 수 있습니다. 두통도 줄일 수 있습니다. –

+0

안녕하세요 저는 데이터를 중요하게 생각하지 않고 큰 데이터를 포함하지 않기 때문에 여기에서 가장 큰 문제는 액세스 사용을 생각하지 않습니다. 그러나 귀하의 신청서는 상업적으로 준비가되어 있지 않습니다! 공유 폴더를 사용하는 사람들이나 공유 폴더를 사용하는 사람들을 본 적이 없었습니다. 대신에 TCP/IP를 사용해야합니다. 1) 2) 3) –

답변

2

난 당신이 말할 싫어하지만, 접근 방식은 근본적으로 결함이 이유입니다. 다음 경우 수행 할 작업은 무엇입니까?

  • 서버의 파일 및 인쇄 공유가 비활성화되어 있습니까?
  • 네트워크 클라이언트가 클라이언트 컴퓨터에서 비활성화되어 있습니까?
  • 서버가 인증 된 사용자 만 허용하도록 구성되었으며 클라이언트에 액세스 할 수 없습니까?
  • 방화벽으로 인해 파일 및 인쇄 공유가 차단 되었습니까?
  • 파일 및 인쇄 공유는 다른 사람의 의견을 이유로 완전히 왜곡되었습니다. 이유는 이유가 무엇입니까?
  • 폴더를 공유하려면 서버에서 관리자 액세스가 필요하지만 현재 사용자는 관리자가 아닙니다.
  • Access 데이터베이스 엔진이 서버 또는 클라이언트에 올바르게 설치되지 않았습니까?
  • 클라이언트 중 하나가 데이터베이스를 손상시킵니다. 이것은 생각보다 쉬운데, 클라이언트가 일시적으로 또는 영구적으로 서버와의 연결을 끊는 네트워크 결함 일뿐입니다.

이들은 당신이 현재의 솔루션으로 해결할 수없는 근본적인 문제입니다.

정상적인 TCP/UDP 포트를 통해 작동 시키십시오. 훨씬 쉬워 질거야. 이를 촉진 할 라이브러리가 있습니다. C# Game Network Library을보십시오. 예를 들어 Microsoft의 XNA SDK에는 게임 네트워킹 기능이 있습니다. 네트워킹을 구현하기 위해 표준 메소드/표준 라이브러리를 사용하면 성공 확률이 훨씬 높아집니다. 클라이언트/서버 아키텍처를 사용한다는 것은 클라이언트가 정상적으로 작동하지 않으면 서버의 상태가 손상되지 않는다는 것을 의미합니다.

나는 이것이 중요한 재 작성을 수반한다는 것을 알고 있습니다. 솔직히이 게임이 높은 지원 비용없이 광범위한 고객 기반에서 상업적으로 성공하기를 원한다면 선택의 여지가 없다고 생각하며 단순한 실험을 넘어 나아갈 수 있습니다.

+0

내 시스템 제한에서 네트워크가 작동되고 공유가 가능해야하며 방화벽을 통해 허용 된 프로그램이어야하며 프로그램 (호스트 또는 클라이언트)을 사용하는 사용자는 모든 게임과 마찬가지로 관리자이어야한다고 명시되어 있습니다. 데이터베이스를 시도하기 전에 TCP/IP 원격 처리를 시도했습니다. 비동기식 소켓 프로그래밍은 골치 거리였다. 분명히, 나의 기술은 아직 발전된 것이 아닙니다. 동기 (synchronous)를 시도하지는 않았지만, 이것이 적용 가능할 것이라고는 생각하지 않는다. (뭔가를받지 않으면 멈출 것이다.) –

+0

분명히 이것은 숙제입니다 - 알겠습니다. 내 충고는 여전히 동일하게 유지됩니다. 상업적으로 성공할 수있는 게임을 만드는 방법을 배우려면 MS Access 접근 방식이 효과적이지 않습니다. 그리고 사용자가 관리자라고 가정 할 수있는 "시스템 제한"도 정확하지 않습니다. 요즘 대부분의 게이머는 Vista/7 UAC로 인해 관리자 토큰을 사용하지 않습니다. 관리자가 아닌 경우 실행해야합니다. –

+0

공유를 활성화해야한다는 제한도 현실적이지 않습니다. 요즘 가정 할 수있는 것은 나가는 연결을 만들 수있는 인터넷 연결이 있다는 것입니다. 들어오는 연결은 방화벽 (Windows 방화벽, NAT 등)으로 인해 불가능할 수 있습니다. –

2

액세스 데이터베이스를 제거하십시오. 설명 된 아키텍처가 이미 '사용자에게 친숙하지 않음'입니다.

SQL Express 또는 설치된 데이터베이스 바이너리가 필요없는 SQL CE (모두 응용 프로그램 폴더에 포함될 수 있음)를 사용하십시오. 이렇게하면 db가 응용 프로그램 폴더 (이상적으로 app_Data)에 남아 있고 .Net은이 폴더의 데이터베이스에 대한 지원을 포함합니다.

많은 문제를 해결할 수있는 액세스 권한을 유지하십시오.

http://blogs.msdn.com/b/sqlservercompact/archive/2011/01/12/microsoft-sql-server-compact-4-0-is-available-for-download.aspx

+0

답해 주셔서 감사합니다. SQL (이미 SQL Server Express 2005, 어쨌든)을 사용해 보았습니다. 모든 설치, 사용자 이름, 암호, 인스턴스, SQL/Windows 인증, TCP/IP 구성 및 SQL 브라우저 문제를 처리해야했습니다.적어도 우리에게는 친숙하지 않았습니다. 적어도 사용자는 아니 었습니다. 가장 확실한 사용자는 아니 었습니다. 사용자가 서버 지식이 없다고 가정해야하기 때문입니다. 그렇다면 SQL CE에 대해 살펴볼 것입니다. .NET 2.0에서 지원하는 것이 좋을 것입니다. –

+0

SQL과 당신은 그 중 하나가 필요 없어 - 그래서 그게 도움이 :) –

+0

SQL CE는 설치 프로그램을 필요로하지 않는 경우, 내가 네트워크에 어떻게 작동합니까? –

0

나는 당신이 당신의 디자이너로 할 수있는 꽤 양식 기반 IO 중 하나를 사용하고 싶어하지 않는 Access를 사용하여 거의 포인트가 있다고 생각합니다. 그리고 나는 이것이 여기에 있을지 의심 스럽다.

모든 파일 IO를 사운드 데이터 액세스 레이어로 바꾸는 것이 좋습니다. 당신은 또한

+0

제안 해 주셔서 감사합니다. SQLite는 흥미로운 것으로 들립니다. 나는 그것을 줄 수도 있지만, 이것이 3 시간짜리 프로젝트이기 때문에 최소한 프로그램을 올바르게 진행할 수있을 때까지 Access에 잠시 머무를 것입니다. –

관련 문제