2013-07-12 193 views
0

我試圖創建通過套接字一個簡單的聊天和它現在適用於LAN和「本地主機」也一樣,當然,但並不在通過互聯網在不同的電腦和多數民衆聊天的真實點,不是嗎!創建一個簡單的網絡聊天

socket = new Socket("--ip address--", 7345); 

這條線適用於--ip address-- =本地主機和--ip address-- =「」我的本地IP地址「」但我的路由器的IP地址,它拋出一個java .net.ConnectException

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

我想用我的電腦作爲服務器,而不是一個真正的服務器,也許有問題,但我認爲必須有一個解決方案。如果這是一個荒謬的簡單問題,不要毀滅我,因爲我是網絡編程的真正新手。

+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說,他現有的服務器上網卡工作正常,當他試圖去了,有一個問題,互聯網它。 – corsiKa

+0

然後我回答的第一部分應覆蓋。 OP正試圖綁定到他的路由器,這是不正確的。我的回答清楚地表明,端口轉發對於在本地網絡之外訪問是必要的。 OP不應該結合自己的路由器IP,應該還是他的機器,他的路由器將通過轉發到他的機器上的端口。 – RGG