java-Java 网络通信 类还未编写如何进行调用(或者解决思路)

问题描述

Java 网络通信 类还未编写如何进行调用(或者解决思路)
  程序想实现的效果:客户端现在有一个对象“狗”,加入了一个LinkedList集合,随后将该集合发送到服务器端。服务器端接收到这个集合,会调用一个方法Judge来判断LinkedList里面有什么,如果是狗则调用XXX方法,如果是猫则调用XXX方法。
        问题描述:现在客户端与服务器端单独抽出成为一个jar工具包。也就是说服务器端和客户端会预先写好。换而言之,在该包里没有Judge方法,Judge方法是在程序实际编写时再写成的。那么此时服务器端代码应该怎么写?
        实际应用举例:当实际使用时,应用程序(客户端)调用Send(),此时该jar包中已编好的程序会将对象发送到服务器端;在服务器端只需写一个Judge(),该方法会被jar包中的程序自动调用。

        大体实现的代码:

客户端:

 //向服务器发送数据
    public void send(TransferLinkedList linkedList) throws IOException{
        /**
         * 本方法用于客户端向服务器发送数据。首先从套接字中获取基本输出流,接下来将该输出流转换为对象输出流以输出对象
         */
        //从该套接字中获取输出流
        OutputStream clientOut = client.getOutputStream();
        //将该输出流处理为对象输出流
        ObjectOutputStream clientOutObject = new ObjectOutputStream(clientOut);
        //传输信息
        clientOutObject.writeObject(linkedList);

        //刷新缓存区
        clientOutObject.flush();

        //接收服务器信息以确认是否成功发送信息

    }

服务器端:

 //开始运行
    public void run() throws IOException{
        //服务器一直等待客户端的连接,当与客户端建立连接时,服务器分出一个线程建立新的Socket进行处理,原有Socket继续等待
        //此处为了简便省略线程
        while(true){
            Socket socket = server.accept();

            //处理新的Socket

            /**
             * 调用Judge方法,Judge方法应在实际使用该jar包时编写
             * 此时不知道Judge包含哪些方法,是怎么样的路径,甚至名字是否是Judge
             * 该使用什么方法来处理?反射?工厂模式?感觉都不大能解决
             */

        }
    }

解决方案

你这个问题实际上就是要定义一个远程调用协议
1.在客户段给发送信息前面加一个头,例如:
@header@type:methodinvoke@服务端的类@服务端的方法@参数列表@end@header@
2.在服务端接受客户段信息时,判断一下头部是否有如上头,如果有,按照协议解析,
然后根据解析内容通过反射调用客户段请求的逻辑执行

此外,服务端最好使用线程池处理客户段请求
在类中定义线程池常量
private static ExecutorService executoService;

在调用具体逻辑时
executoService = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors() * 10);
executoService.execute(new SocketThread(socket));

解决方案二:

http://bbs.csdn.net/topics/391897106

时间: 2024-11-10 00:54:07

java-Java 网络通信 类还未编写如何进行调用(或者解决思路)的相关文章

java中string类转成timestamp类

问题描述 java中string类转成timestamp类 java中string类转化成timestamp时,调用了timestamp的valueof()方法,但是转换后是还有小数点的,想去掉小数点,但还是timestamp类型,该如何做呢?说明下,string是存放类似日期格式的字符串.谢谢各位大神的指导,在下感激不尽. 解决方案 timestamp本身就是带毫秒的.如果要输出用,还是的格式化成string输出.如果数据库要存储用,可以转成date后,用date.gettime()获取lon

为什么java中的类里面还能声明一个静态的自己

问题描述 为什么java中的类里面还能声明一个静态的自己 如题,感觉这种情况好诡异,能不能解释一下下面这段代码的流程呢?代码如下 public class CameraInterface { private static final String TAG = "yanzi"; private Camera mCamera; private Camera.Parameters mParams; private boolean isPreviewing = false; private f

07_数据库创建,添加c3p0操作所需的jar包,编写c3p0-config.xml文件,编写User.java,编写jdbcUtils.java实现操作数据库的模板工具类,UserDao编写,Dao

 1  创建day14数据库,创建user.sql表: A 创建数据库 day14 B 创建数据表 users create table users (     id int primary keyauto_increment,     username varchar(20),     password varchar(20) ); 2  添加依赖的jar包 c3p0-0.9.1.2.jar mysql-connection-java-5.0.8-bin.jar commons-beanu

编写一个JAVA的队列类

  根据这些特点,对队列定义了以下六种操作: enq(x) 向队列插入一个值为x的元素; deq() 从队列删除一个元素; front() 从队列中读一个元素,但队列保持不变; empty() 判断队列是否为空,空则返回真; clear() 清空队列; search(x) 查找距队首最近的元素的位置,若不存在,返回-1. Vector类是JAVA中专门负责处理对象元素有序存储和任意增删的类,因此,用Vector 可以快速实现JAVA的队列类. public class Queue extends

Java中的类反射机制

一.反射的概念 :反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力.这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被程序语言的设计领域所采用,并在Lisp和面向对象方面取得了成绩.其中LEAD/LEAD++ .OpenC++ .MetaXa和OpenJava等就是基于反射机制的语言.最近,反射机制也被应用到了视窗系统.操作系统和文件系统中. 反射本身并不是一个新概念,它可能会使我们联想到光学中的反射概念,尽管计算机科学

深入研究java.lang.Runtime类【转】

  转自:http://blog.csdn.net/lastsweetop/article/details/3961911 目录(?)[-] javalang 类 Runtime getRuntime exit addShutdownHook removeShutdownHook halt runFinalizersOnExit exec exec exec exec exec exec availableProcessors freeMemory totalMemory maxMemory g

Java的string类常量池及不可变性

1.String常量池     当使用new String("hello")时,JVM会先使用常量池来管理"hello"直接量,再调用String类的构造器来创建一个新的String对象,新创建的对象被保存在堆内存中.即new String("hello")一共产生了两个字符串对象. [常量池constant pool]管理在编译时被确定并保存在已编译的.class文件中的一些数据,包括关于类.方法.接口中的常量,和字符串常量.  [字符串常量池

java基础关于类的问题

问题描述 我现在刚刚学java,关于类的问题看了很多书还不是很明白,能不能请哪位高手告诉我一下,最好附加一个程序,给我分析一下这个程序的编写过程,谢谢了!!!!! 解决方案 解决方案二:类的那些问题不明白??解决方案三:问具体的问题嘛!解决方案四:程序呢??解决方案五:publicclassPerson{//人类Stringname;//属性(人类的名字)intage;//属性(人类的年龄)//构造方法publicPerson(Stringname,intage){//想创造一个人类(对象)的话

java使用Socket类接收和发送数据_java

网络应用分为客户端和服务端两部分,而Socket类是负责处理客户端通信的Java类.通过这个类可以连接到指定IP或域名的服务器上,并且可以和服务器互相发送和接受数据.在本文及后面的数篇文章中将详细讨论Socket类的使用,内容包括Socket类基础.各式各样的连接方式.get和set方法.连接过程中的超时以及关闭网络连接等. 在本文中,我们将讨论使用Socket类的基本步骤和方法.一般网络客户端程序在连接服务程序时要进行以下三步操作. 连接服务器 发送和接收数据 关闭网络连接 一.连接服务器 在