2016-12-30 217 views
1

我试图运行在Windows comman行代码,并收到异常:在另一个命令行windwjava.net.ConnectException:连接被拒绝:连接发生

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

更换

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

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

或者说端口的缺省值是零,那么你的ServerSocket将0端口绑定,而不是7777

,并作为该代码段:

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

恐怕也很容易使你陷入困境,因为我们不能保证服务器线程将前客户线程执行,如果客户线程执行时首先服务器还没有运行它会导致错误。而且你已经在另一个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);'在** init方法**中。或者相当于与 关联的InputStream上的read()调用,此Socket将仅阻塞3000ms。如果超时 到期,则引发** java.net.SocketTimeoutException **。 –

相关问题