有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

tcp java服务器未从客户端接收对象

我有一个客户端,它向服务器发送一个类对象。服务器应该调用该类的方法并返回结果。 我得到以下异常java。lang.ClassNotFoundException:新客户端。当我运行我的程序时测试对象

服务器。java:

package newserve;

import java.net.*;
import java.io.*;
import java.lang.reflect.*;

public class SERVER {
    public static void main(String[] args) {
    int port = 9876;
        try {
          ServerSocket ss = new ServerSocket(port);
      Socket s = ss.accept();

          InputStream is = s.getInputStream();
      ObjectInputStream ois = new ObjectInputStream(is);

      //read the first object from the socket
      Object o1 = /*(Object)*/ois.readObject();

          //Handling the first received object
      if (o1 != null){
        System.out.println("\nFROM SERVER - receiving class: " +
                                      o1.getClass().getName());
    System.out.println("\nWith these methods: \n" );

    //get all the methods into an array
    Method[] methods = o1.getClass().getDeclaredMethods();

    //print the methods
    for(int i = 0; i < methods.length; i++)
      System.out.println(methods[i]);

    //invoking the first method with default constructor
    Object a = methods[0].invoke(o1.getClass().newInstance(),
                                          new Object[] {3, 5});

    System.out.println("\nOutput of the first method: " + a);
  }

  //read the second object from the socket
  Object o2 = ois.readObject();
  System.out.println("\n\nFROM SERVER - receiving class: " +
                                      o2.getClass().getName());
  System.out.println("\nWith these: " + o2);

  //close everything and shut down
  is.close(); //close input stream
  s.close();  //close the socket
  ss.close(); //close the server's socket

}catch(Exception e){System.out.println(e);}
}

}

客户端。java:

package newclient;

import java.net.*;
import java.io.*;

public class CLIENT {
    public static void main(String[] args) {
        int port = 9876;
    try{
      Socket s = new Socket("localhost", port);
      OutputStream os = s.getOutputStream();
      ObjectOutputStream oos = new ObjectOutputStream(os);

      Object to = new TestObject(); //create a new object

      oos.writeObject(to); //send the object to the server

      //    create a new String object and send
      oos.writeObject(new String("A String object from client"));

      //close the connection
      oos.close();
      os.close();
      s.close();
    }catch(Exception e){System.out.println(e);}
  }
}

TestObject。java:

package newclient;

import java.io.*;

/**
* A test object to send via socket
*/
class TestObject implements Serializable {
  static final long serialVersionUID = 0;
  //constructor
  public TestObject(){};//default constructor

  //method
  public int add(int a, int b){return a+b;}
  public int sub(int a, int b){ return a-b;}
}

谢谢!


共 (1) 个答案

  1. # 1 楼答案

    我假设客户机和服务器程序在不同的机器上运行。然后,正如nos所说,您需要添加到服务器的类路径中

    你的客户应该是这样的

        (CWD)
    ├── newclient
    │   ├── CLIENT.class
    │   └── TestObject.class
    

    你应该这样开始

    java -classpath . newclient.CLIENT.class
    

    您的服务器应该是这样的(注意它需要TestObject.class)

    (CWD)
    ├── newclient
    │   └── TestObject.class
    └── newserver
        └── SERVER.class
    

    你应该这样开始

    java类路径。新闻服务器。客户阶级