2016-12-30 4 views
1

を発生し、例外を受信して​​接続:別のコマンドラインwindwでjava.net.ConnectException:接続が拒否されました:私は窓のcomman行のコードを実行しようとしています

D:\dasi\java\javaLab>java ServerClient 
java.net.ConnectException: Connection refused: connect 
java.lang.StringIndexOutOfBoundsException: String index out of range: -2 

D:\dasi\java\javaLab> 

D:\dasi\java\javaLab>java SocketClient 
java.net.ConnectException: Connection timed out: connect 

D:\dasi\java\javaLab> 

サーバーコード:

import java.io.*; 
import java.net.*; 
public class ServerClient { 
    public ServerClient(int port) { 
     Server server = new Server(port); 
     server.start(); 
     Client client = new Client(port); 
     client.start(); 
    } 
    public static void main(String[] args) { 
     ServerClient s1 = new ServerClient(7777); 
    } 
} 

class Server extends Thread { 
    int port; 
    ServerSocket server; 
    Socket socket; 
    DataOutputStream outStream = null; 
    DataInputStream inStream = null; 
    public Server(int poort) { 
     try { 
      this.port = port; 
      server = new ServerSocket(port); 
     } 
     catch(Exception e) { 
      System.out.println(e.toString()); 
     } 
    } 
    public void run() { 
     try { 
      socket = server.accept(); 
      outStream = new DataOutputStream(socket.getOutputStream()); 
      inStream = new DataInputStream(socket.getInputStream()); 
      System.out.println("server is ok, please continue!"); 
      while(true) { 
       String str = inStream.readUTF(); 
       System.out.println("The server receive String:"+str); 
       outStream.writeUTF(str); 
      } 
     } 
     catch(Exception e) { 
      System.out.println(e.toString()); 
     } 
    } 
} 

class Client extends Thread { 
    int port; 
    Socket socket; 
    DataInputStream inStream = null; 
    DataOutputStream outStream = null; 
    public Client(int port) { 
     try { 
      this.port = port; 
      socket = new Socket(InetAddress.getLocalHost(),port); 
      inStream = new DataInputStream(socket.getInputStream()); 
      outStream = new DataOutputStream(socket.getOutputStream()); 
      System.out.println("client is ok, please continue!"); 
     } 
     catch(Exception e) { 
      System.out.println(e.toString()); 
     } 
    } 
    public void run() { 
     try { 
      while(true) { 
       byte[] b = new byte[1024]; 
       String str = ""; 
       int m = System.in.read(b); 
       str = new String(b,0,0,m-1); 
       outStream.writeUTF(str); 
       str = inStream.readUTF(); 
       System.out.println("The client receive String:"+str); 
      } 
     } 
     catch(Exception e) { 
      System.out.println(e.toString()); 
     } 
    } 
} 

クライアントコード:

import java.net.*; 
import java.io.*; 
public class SocketClient { 
    Socket s = null; 
    DataInputStream inStream = null; 
    DataOutputStream outStream = null; 
    public SocketClient() { 
     try { 
      init(); 
      waitData(); 
     } 
     catch(Exception e) { 
      System.out.println(e.toString()); 
     } 
    } 
    void init() throws Exception { 
     s=new Socket("10.15.43.216",8765); 
     inStream = new DataInputStream(s.getInputStream()); 
     outStream = new DataOutputStream(s.getOutputStream()); 
     s.setSoTimeout(3000); 
    } 
    void waitData() { 
     while(true) { 
      try { 
       String str = inStream.readUTF(); 
       System.out.println("Client accept:" +str); 
       str = Integer.toString(Integer.parseInt(str)+1); 
       outStream.writeUTF(str); 
      } 
      catch(Exception e) { 
       System.out.println(e.toString()); 
       break; 
      } 
     } 
    } 
    public static void main(String[] args) { 
     new SocketClient(); 
    } 
} 

私のコードに何か問題がある場合、または問題の原因となっているコンピュータのポートであった場合、私はうんざりしています。コンピュータのポートを調べたところ、7777は見えませんでした。コマンドnetstat -nao |を発行したときに、 findstr 7777、何も返されませんでした。

D:\dasi\java\javaLab>netstat -nao | findstr 7777 

D:\dasi\java\javaLab> 

ポートの問題だった場合は、7777ポートを開く方法です。 私はここで初心者です、助けてください。どうもありがとう!

答えて

1

ポートのデフォルト値はゼロで、その後、あなたのServerSocketが0ポートではなく、7777

と結合し、このためのようになる

public Server(int poort) { 
    try { 
     this.port = port; 
     ... 
    } 
} 

かというと

public Server(int poort) { 
    try { 
     this.port = port; 
     ... 
    } 
} 

を置き換えますコードセグメント:

public ServerClient(int port) { 
    Server server = new Server(port); 
    server.start(); 
    Client client = new Client(port); 
    client.start(); 
} 

私たちはサーバスレッドクライアントスレッドの前に実行され、サーバがエラーの原因となります実行したhaventときクライアントスレッドが最初に実行した場合、確実に傾けるので、トラブルにあなたを作るのは簡単です怖いです。そして、あなたはすでに別のJavaファイルにクライアントを持っているので、なぜここにクライアントがあるのか​​理解できません。たぶん、あなたがそれらを削除することができ、コードは次のことができます:

クライアント用として
public ServerClient(int port) { 
    Server server = new Server(port); 
    server.start(); 
} 

コード サーバーソケットは7777がそうあなたがあなたの中に7777ポートではなく、8765を接続する必要がありinitメソッド多分コードのことが可能です

void init() throws Exception { 
    s=new Socket(server name,7777); 
    ... 
} 
+0

私のサーバーコードでエラーを変更した後、今すぐ実行できます。しかし、クライアントの場合、私はまだ接続タイムアウト例外を受け取ります。 – Lily

+0

ポート番号8765を7777に変更すると、引き続き接続タイムアウト例外が発生します。 – Lily

+0

@Lilyコメント 's.setSoTimeout(3000);' in ** initメソッド**。または、 に関連付けられたInputStreamのread()呼び出しでは、このソケットはわずか3000msだけブロックされます。タイムアウト が期限切れになると、** java.net.SocketTimeoutException **が発生します。 –

関連する問題