Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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 QuickServer对象处理程序_Java_Sockets_Open Source_Java Server - Fatal编程技术网

java QuickServer对象处理程序

java QuickServer对象处理程序,java,sockets,open-source,java-server,Java,Sockets,Open Source,Java Server,我最近遇到了一个用于java多线程服务器的开源库。第一个示例是使用ClientCommandHandler的EchoServer 工作得很好。但是,它只适用于字符串。在我的特定应用程序中,我希望使用一个特殊的自定义对象在服务器和客户端之间交换消息 我尝试了以下方法: package server; import java.io.IOException; import org.quickserver.net.AppException; import org.quickserver.net.se

我最近遇到了一个用于java多线程服务器的开源库。第一个示例是使用ClientCommandHandler的EchoServer 工作得很好。但是,它只适用于字符串。在我的特定应用程序中,我希望使用一个特殊的自定义对象在服务器和客户端之间交换消息

我尝试了以下方法:

package server;

import java.io.IOException;

import org.quickserver.net.AppException;
import org.quickserver.net.server.DataMode;
import org.quickserver.net.server.DataType;
import org.quickserver.net.server.QuickServer;

public class TestServer {
      public static void main(String s[])  {
        QuickServer server = new QuickServer();
        try {
            server.setDefaultDataMode(DataMode.OBJECT, DataType.IN);
            server.setDefaultDataMode(DataMode.OBJECT, DataType.OUT);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        server.setClientObjectHandler("server.ObjHandler");
        server.setPort(4123);
        server.setName("EchoServer v 1.0");
        try {
          server.startServer();
        } catch(AppException e){
          System.err.println("Error in server : "+e);
        }
      }
    }
    public void gotConnected(ClientHandler handler) throws SocketTimeoutException,
        IOException {
    handler.setDataMode(DataMode.OBJECT, DataType.IN);
    handler.setDataMode(DataMode.OBJECT, DataType.OUT);     
}
…并将其设置为对象处理程序

package server;

import java.io.IOException;
import java.net.SocketTimeoutException;

import org.quickserver.net.server.ClientHandler;
import org.quickserver.net.server.ClientObjectHandler;

public class ObjHandler implements ClientObjectHandler {

    @Override
    public void handleObject(ClientHandler arg0, Object arg1)
            throws SocketTimeoutException, IOException {
        // TODO Auto-generated method stub

    }
}
因此,我试图用对象处理程序完全替换命令处理程序。我得到以下错误:

Loading QuickServer v2.0.0 RC1 [PID:2488]... Done
Mar 24, 2013 7:26:07 PM org.quickserver.net.server.QuickServer loadBusinessLogic
SEVERE: ClientCommandHandler AND ClientEventHandler was not set.
Mar 24, 2013 7:26:07 PM org.quickserver.net.server.QuickServer startServer
SEVERE: Exception: org.quickserver.net.AppException: ClientCommandHandler AND 
ClientEventHandler was not set.
org.quickserver.net.AppException: ClientCommandHandler AND ClientEventHandler was not set.
    at org.quickserver.net.server.QuickServer.loadBusinessLogic(QuickServer.java:3142)
    at org.quickserver.net.server.QuickServer.startServer(QuickServer.java:432)
    at server.TestServer.main(TestServer.java:24)
Error in server : org.quickserver.net.AppException: Exception :org.quickserver.net.AppException: ClientCommandHandler AND ClientEventHandler was not set.

所以我的问题是。是否可以在根本不定义命令处理程序的情况下用对象处理程序替换命令处理程序?如果不是,那么实现对象处理程序的正确方法是什么?

它仍然需要CommandHandler。但在方法“GotConnected”中,您可以添加以下内容:

package server;

import java.io.IOException;

import org.quickserver.net.AppException;
import org.quickserver.net.server.DataMode;
import org.quickserver.net.server.DataType;
import org.quickserver.net.server.QuickServer;

public class TestServer {
      public static void main(String s[])  {
        QuickServer server = new QuickServer();
        try {
            server.setDefaultDataMode(DataMode.OBJECT, DataType.IN);
            server.setDefaultDataMode(DataMode.OBJECT, DataType.OUT);
        } catch (IOException e1) {
            // TODO Auto-generated catch block
            e1.printStackTrace();
        }
        server.setClientObjectHandler("server.ObjHandler");
        server.setPort(4123);
        server.setName("EchoServer v 1.0");
        try {
          server.startServer();
        } catch(AppException e){
          System.err.println("Error in server : "+e);
        }
      }
    }
    public void gotConnected(ClientHandler handler) throws SocketTimeoutException,
        IOException {
    handler.setDataMode(DataMode.OBJECT, DataType.IN);
    handler.setDataMode(DataMode.OBJECT, DataType.OUT);     
}
其余的传输将由ObjectHandler类完成