2011-11-17 4 views
3

소켓을 사용하여 Java로 네트워크 게임을 만들었습니다. 그건 내 LAN을 통해서만 훌륭하게 작동합니다. :/내가 할 수 있기를 원하는 것은 설정하여 집에있는 컴퓨터에서 실행되는 서버를 시작하고 클라이언트 코드를 실행 가능한 jar 파일로 다른 사람에게 보내고 실행시킬 수있게한다. 인터넷을 통해 연결하십시오. 하지만 ... 나는 내 모뎀을 설정하는 방법을 모르겠다 & 라우터.Java 소켓 포트 전달

http://imageshack.us/photo/my-images/254/modem.jpg

을 그리고 그 페이지 다음과 같습니다 넷기어 라우터 : :(내가 무선 지우기 모뎀을 가지고있는 구성 페이지는 다음과 같습니다

http://imageshack.us/photo/my-images/443/routerq.jpg

을 지금, 클라이언트와 서버 러너 클래스에서 PC의 개인 IP 주소와 함께 선택한 포트 번호를 ServerSocket 및 Socket 객체에 전달합니다. 소켓을 설정하는 방법에 따라 소켓이 UDP 또는 TCP가 될 수 있다고 들었습니다. 뭔가 ...? 나는 그런 것을하지 않는다, 나는 단지 인스턴스화한다. 클라이언트에 대한

ServerSocket sock = new ServerSocket(); 
sock.bind(new InetSocketAddress(IP, 9001)); 

코드 : : 그래서 또한

Socket sock = new Socket(IP, 9001); 

, 나는 것 그들이가는 떨어져 그들과 서버의 코드에서 ...

을 그들에게이 개 값을 전달하고, 라우터/모뎀 설정 변경에 따라 코드를 변경하는 방법을 알아야합니다.

"IP"는 컴퓨터의 개인 IP 인 192.168.1.10을 나타내는 문자열이며 해당 프로그램이 소켓 & ServerSocket에 전달하는 문자열 인 경우에만 작동합니다. 내가 말했듯이, 나는 내 컴퓨터에 연결된 라우터에 연결된 모뎀을 가지고있다. 그래서 누군가 나에게 설명해 주실 수 있습니까? (구체적으로 말하면, 제가 멍청이이기 때문에) 둘 다 구성하기 위해해야 ​​할 일과 코드에 적용해야하는 변경 사항은 무엇입니까?

답변

0

여기에 몇 가지 질문을하는 것처럼 들리지만 ... 네트워크/소켓 프로그래밍 전문가는 아니지만 몇 가지 아이디어가 있습니다.

배포의 경우 Java Web Start을 참조하십시오. 고객이 업데이트를 자동화하고 응용 프로그램을 쉽게 얻을 수 있습니다.

이와 같은 Socket 생성자를 사용하는 경우 실제 구현은 시스템 기본값이됩니다. 적절한 SocketImplFactory 구현을 사용하여 this method을 호출하여이를 재정의 할 수 있습니다.

IP 주소 및 포트는 ... 포트에 대해 하드 코드 된 값을 사용하는 것이 좋습니다. 클라이언트가 연결하려면 포트 또는 적어도 일부 기본값을 결정해야합니다. 그렇더라도 일부 외부 구성 파일에서 값을 읽는 것이 유용 할 수 있습니다.이렇게하면 다른 사람들이 서버를 실행할 수 있도록 서버 응용 프로그램을 배포하기로 결정했을 때 쉽게 할 수 있습니다. 그들은 다른 포트를 사용하고자 할 수 있습니다.

서버의 IP 주소 (사용자)를 코드로 하드 ​​코딩하면 분명히 아니오입니다. 클라이언트는 IP 주소 또는 일부 구성 파일에서 제공하거나 설정해야하는 호스트 이름을 사용하여 연결해야합니다. 정적 IP 주소가없는 경우 호스트 이름이 필요합니다.

당신과 친구들이 즐길 수있는 것이 아닌 한, 채팅 세션이나 다른 곳에서 IP와 포트를 제공하여 게임을 시작할 수있는 곳이라면 회사에서 외부 호스팅 솔루션을 찾는 것이 좋습니다 당신을 위해 DNS 해상도와 네트워크 설정을 처리합니다. 요즘 Java EE 서버 나 데이터베이스와 같은 요구 사항이 없다면 매우 저렴한 물건을 찾을 수 있습니다.

EDIT : 다른 생각. TCP는 유스 케이스에서는 괜찮을 지 모르지만 최소 지연과 빠른 입력 동기화가 필요한 게임 (예 : 사수 또는 게임 게임)이라면 최상의 선택이 아닙니다. 이 경우 UDP가 더 좋을 것입니다. 그것은 desync를위한 일종의 탐지 또는 떨어 뜨린 패킷을 보충하는 메커니즘을 추가 할 것을 요구할 것입니다.

1

자동 포트 포워딩을 위해 수동으로 포트 포워드하거나 UPnP 나 NAT-PMP와 같은 솔루션을 봐야 할 것입니다. 불행하게도, NAT는 엉덩이에 고통을 구성하고 대부분의 라우터가 제대로 지원하지 않습니다. 또한 다양한 구현 및 메커니즘을 지원해야하므로 간단한 작업이 아닙니다.

라우터를 설정하여 하나의 포트를 컴퓨터로 전달하는 것은 너무 어렵지 않습니다. 꽤 많은 라우터에서 그것을 수행하는 방법에 대한 훌륭한 목록은 http://portforward.com/을 참조하십시오.