Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 服务器-客户端多线程_Java_Eclipse_Sockets_Server - Fatal编程技术网

Java 服务器-客户端多线程

Java 服务器-客户端多线程,java,eclipse,sockets,server,Java,Eclipse,Sockets,Server,我正在用聊天服务器客户端完成任务。下面是我如何启动服务器的 public static void StartServer(){ // Create socket try { serversocket = new ServerSocket(ServerPort); } catch (Exception e) { isError = true; ERRORCODE = "ERROR! Cannot create a new so

我正在用聊天服务器客户端完成任务。下面是我如何启动服务器的

public static void StartServer(){
    // Create socket
    try {
        serversocket = new ServerSocket(ServerPort);
    } catch (Exception e) {
        isError = true;
        ERRORCODE = "ERROR! Cannot create a new socket! " + e.getMessage();
        return;
    }

    // A new thread to wait for connection
    Thread TH_Wait4Connection = new Thread(){
        public void run(){
            while(true){
                String ERRORHere = "-1"; // To specify whre the Errors are
                try {
                    Connection = new Socket();
                    Connection = serversocket.accept();
                } catch (Exception e) {
                    ERRORCODE =  ERRORHere + " : " + e.getMessage();
                    return;
                }

                // Another Thread to handle a connection
                try {
                    ERRORHere = "1";
                    Thread Client = new Thread(new ConnHandler(Connection));
                    ERRORHere = "2";
                    threadList.add(Client);
                    ERRORHere = "3";
                    Client.start();
                    ERRORHere = "4";
                } catch (Exception e) {
                    ERRORCODE = ERRORHere + " : " + e.getMessage();
                    return;
                }
                try {Thread.sleep(10);} catch (Exception e) {}
            } // End why loop
        } // End run()
    };

    TH_Wait4Connection.start();
}
当我在eclipse中调试时,我的客户机可以连接到服务器,一切正常,服务器创建线程,并没有捕获异常。但是如果我跑的话,它会进入最后一次捕获和我的错误代码

ERRORCODE = ERRORHere + " : " + e.getMessage();    

这些错误是什么?如何修复它

谢谢你的阅读

更新类处理程序
您的问题是ConnHandler中的这一行:

byte[]NewInData=Arrays.copyOfRange(InData,6,字节计数)

呼叫此线路时,字节数为4。由于参数FROM比参数TO(6>4)大,因此它抛出一个非法argumentException。有关此方法的详细信息


通常,不建议捕获类型异常,而不是不同捕获块中的子类型。您当前的实现可能会隐藏未检查的异常。此外,如果捕获子类型,您将知道发生了什么类型(无需手动检查)并更快地进行调试,就像您当前的情况一样。

ConnHandler类做了什么,我认为基于“1”,然后在从ConnHandler实例化时崩溃,对吗?感谢您的回复。康纳德勒已更新。我不知道我的代码哪里出错了,我认为这个类很简单。它在运行应用程序时崩溃,当我运行Debug.oops时什么也没发生。我想我发现了我的问题。我试图删除这一行byte[]NewInData=Arrays.copyOfRange(InData,6,bytescont);字节数超出InData数组范围。但我想知道为什么在运行调试时没有错误。非常感谢!谢谢。我终于找到了。非常感谢
1 : 6 > 4
public class ConnHandler implements Runnable{

    public ConnHandler(Socket Connection) throws Exception{

        InputStream IS = Connection.getInputStream();   
        byte[] InData =  new byte[1024];
        int bytesCount = IS.read(InData);
        // Remove first 6 bytes
        byte[] NewInData = Arrays.copyOfRange(InData, 6, bytesCount);
    }

public void run(){}
}