循环时服务器程序卡在错误中

时间:2017-09-09 07:36:58

标签: java serversocket

这是我的简单服务器程序的代码,客户端将连接然后创建一个person对象,即使没有客户端尝试连接仍然存在错误。附:我如何printStackTrace(),如果我在第二个catch语句中取消注释服务器中的行(在while循环中),我得到红色写入而不是堆栈跟踪。

'import java.net.ServerSocket;
 import java.net.Socket;


public class Test {

    ServerSocket ss;
    int id;

    public Test(int portNo){

        id = 0;
        Listen(portNo);
    } 

    private void Listen(int portNo){

        try{
            ss = new ServerSocket(portNo);
        }
        catch(Exception e){
            System.out.println(e.getMessage());     
        }

        while(true){
            try{
                id++;
                new Thread(new Person(ss.accept(),id)).start();
            }
            catch(Exception e){
                System.out.println("2 " + e.getMessage());
                //e.printStackTrace();
            }
        } 
    }

}

每当我运行这个时,我总会得到错误" 2 null"重复。

人员类:

import java.net.Socket;


    public class Person implements Runnable{

        int id;

        public Person(Socket s, int id){

            this.id = id;
        }

        public void run(){

            System.out.println(id + " Connected to server");

        } 

    }

客户代码:

 import java.net.InetAddress;
 import java.net.Socket;
 import java.util.Scanner;


 public class test1{

    String serverIp;
    Boolean connected;
    InetAddress IP;
    Socket clientSocket;
    Integer clientID;
    int ssPortNo;

    public test1(){
        System.out.println("Enter IP : ");
        Scanner sc = new Scanner(System.in);
        String ip = sc.next();
        System.out.println("Enter port : ");
        String port = sc.next();
        setupConnection(ip, port);
    }




    private void setupConnection(String serverIP, String port) {
        int portInt = Integer.parseInt(port);
        serverIp = serverIP;
        try {
            connected = true;
            IP = InetAddress.getByName(serverIP);
            clientSocket = new Socket(serverIP, portInt);
            System.out.println("Connecting");
        }
        catch(Exception e){
            System.out.println("1 " + e.getMessage());  
        }
    }
}

1 个答案:

答案 0 :(得分:0)

问题是如果出现异常,你什么都不做。

  

每当我运行这个时,我总会得到错误" 2 null"重复。

这是因为(我认为)你已经拥有一个监听特定端口的服务器,并且你在同一个端口运行服务器。在这种情况下抛出一个异常(Address已在使用中)。要快速验证,请尝试更改服务器侦听的端口。

修改

我认为由于某种原因,您的ServerSocket为null。你能在服务器中添加它并显示输出吗?

if(ss!=null){
        while(true){
            Socket socket = null;
            try{
                id++;
                System.out.println("Server wait at 9094");
                socket = ss.accept();
                new Thread(new Person(socket,id)).start();
                socket.close();
            }
            catch(Exception e){
                System.out.println("2 " + e);
            }

        } 
    }
        else 
        {
            System.out.print("the ServerSocket is NULL");
        }