2013-07-12 3 views
0

나는 소켓을 통해 간단한 채팅을 만들려고 노력했는데 현재 LAN과 "localhost"에서도 작동하지만 인터넷을 통해 다른 컴퓨터 사이에는 채팅 할 수 없다. , 그렇지 않아!간단한 인터넷 채팅 만들기

이 줄은 "내 로컬 IP 주소" ""--ip address-- = 로컬 호스트와 --ip address-- = 작동하지만, 내 라우터의 IP 주소로
socket = new Socket("--ip address--", 7345); 

, 그것은 자바를 던졌습니다 .net.ConnectException

" java.net.ConnectException: Connection refused: connect " 

나는 서버로 내 PC를 사용하려면이 아닌 실제 서버는, 아마 문제가 있지만, 나는 해결책이 있어야한다고 생각합니다. 그것이 터무니없는 간단한 질문이라면, 나는 네트워크 프로그래밍의 진정한 초보자이기 때문에 저를 망치지 마십시오. 당신은 서버를 만들 때

+3

라우터에는 포트 7345가 열려 있지 않을 수 있습니다. – duffymo

+0

그리고 라우터가 열려 있다면 라우터가 해당 포트에서 컴퓨터로 트래픽을 전송하는 것을 알지 못합니다. – corsiKa

+0

방화벽 문제가 발생할 가능성이 큽니다. – winne2

답변

-1

, 당신은

서버 소켓은 컴퓨터의 IP 주소의 컴퓨터에서 실행해야 ... 그것은 실행중인 곳의 IP 주소와 서버 소켓을 사용해야합니다.

라우터를 사용하여 서버를 호스팅하는 포트로 연결을 전달해야합니다.

그러면 로컬 네트워크 외부에서 연결할 수 있어야합니다.

당신이하는 일에 대한 코드가 없으면 여기에 유일한 문제가 있는지 알려주지 않는 간단한 채팅 서버가 있습니다.

import java.net.*; 
import java.io.*; 

public class ChatServer 
{ private Socket   socket = null; 
    private ServerSocket server = null; 
    private DataInputStream streamIn = null; 

    public ChatServer(int port) 
    { try 
     { 
     System.out.println("Binding to port " + port + ", please wait ..."); 
     server = new ServerSocket(port); 
     System.out.println("Server started: " + server); 
     System.out.println("Waiting for a client ..."); 
     socket = server.accept(); 
     System.out.println("Client accepted: " + socket); 
     open(); 
     boolean done = false; 
     while (!done) 
     { try 
      { String line = streamIn.readUTF(); 
       System.out.println(line); 
       done = line.equals(".bye"); 
      } 
      catch(IOException ioe) 
      { 
       done = true; 
      } 
     } 
     close(); 
     } 
     catch(IOException ioe) 
     { System.out.println(ioe); 
     } 
    } 
    public void open() throws IOException 
    { streamIn = new DataInputStream(new BufferedInputStream(socket.getInputStream())); 
    } 
    public void close() throws IOException 
    { if (socket != null) socket.close(); 
    if (streamIn != null) streamIn.close(); 
    } 
    public static void main(String args[]) 
    { ChatServer server = null; 
     if (args.length != 1) 
     System.out.println("Usage: java ChatServer port"); 
     else 
     server = new ChatServer(Integer.parseInt(args[0])); 
    } 
} 
+0

OP는 기존의 서버가 LAN에서 잘 작동한다고 말하면서 인터넷을 통해 문제가 있다는 것을 알게됩니다. – corsiKa

+0

그러면 내 대답의 첫 부분이 그것을 커버해야합니다. OP가 잘못된 라우터에 바인딩하려고합니다. 내 대답은 포트 포워딩이 로컬 네트워크 외부에 액세스하는 데 필요하다는 것을 명확하게 설명합니다. OP는 그의 라우터 IP에 바인딩되어서는 안되며, 여전히 그의 머신이어야하며 그의 라우터는 자신의 머신의 포트로 전달할 것입니다. – RGG