我试图在一个服务器和一个客户端之间创建一个简单的传输.我正在尝试从客户端向服务器发送一个Object.我已经多次检查了我的代码,我真的不知道为什么不起作用.此外,id喜欢添加我已经在netbeans中创建了两个单独的项目,一个用于客户端,一个用于服务器.代码如下:
客户:
package client;
import java.net.*;
import java.io.*;
import java.util.Scanner;
import java.io.Serializable;
class Object implements Serializable {
String one;
String two;
public Object(String one, String two){
this.one = one;
this.two = two;
}
@Override
public String toString(){
return "\nOne: " + one +"\nTwo: " + two;
}
}
public class Client {
public static void main(String[] args){
try {
Object obj= new Object ("Something", "Else");
Socket sock = new Socket("127.0.0.1", 1111);
ObjectOutputStream oos = new ObjectOutputStream(sock.getOutputStream());
System.out.println("Connecting to "+ sock.getInetAddress()+ " and port "+sock.getPort());
System.out.println("Local Address :"+sock.getLocalAddress()+" Port:"+sock.getLocalPort());
oos.writeObject(obj);
oos.flush();
oos.close();
sock.close();
System.out.println("Connection Closing...");
} catch (Exception ex){
System.out.println("No Conenction");
}
}
}
Run Code Online (Sandbox Code Playgroud)
服务器:
<!-- language: lang-java -->
package server;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.*;
import java.io.*;
class Object implements Serializable {
String one;
String two;
public Object(String one, String two){
this.one = one;
this.two = two;
}
@Override
public String toString(){
return "\nOne: " + one +"\nTwo: " + two;
}
}
public class Server {
public static void main(String[] args){
try{
ServerSocket server = new ServerSocket(1111,10);
System.out.println("Waiting Incoming Connection...");
System.out.println("Local Address :"+server.getInetAddress()+" Port:"+server.getLocalPort());
Socket sock = server.accept();
ObjectInputStream ois = new ObjectInputStream(sock.getInputStream());
Object ob=new Object ("Once", "Upon"); //for test
Object obj2= null;
try{
obj2 = (Object )ois.readObject();
System.out.println(obj2);
}catch (Exception ex){
System.out.println("nothing...");
}
System.out.println(ob);
ois.close();
}catch (Exception ex){
System.out.println("Error during I/O");
ex.getMessage();
ex.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
代码有效,但对象永远不会发送= /.我收到的消息是"没有...",这是异常.连接有效,因为使用简单的消息BufferedReader(),BufferedWritter()可以交换消息.问题在于对象....
1)不要只说"抛出一些异常".打印抛出的异常,以及where(e.printStackTrace()).
2)最有可能的是,您必须在服务器和客户端中使用相同的类.这意味着同一个包,too(client.Object)与(server.Object)不同.可能你得到了a ClassCastException).
3)请不要使用API中的类名来命名您的类,并且不要使用任何来自java.lang.任何名字都比Object.
更新:一些实施技巧
又脏又脏.重命名你server.Object的server.MyServer.导入client.Object.使obj2变量a client.Object.麻烦的是,要运行服务器,您需要在类路径中使用客户端代码.
更详细.mytest.Bean使用要传输的对象的定义创建第三个类(比如说).在客户端和服务器代码中使用此类(不要忘记将其添加到类路径中).
最后,当您拥有一个真正的应用程序时,您将使共享数据成为库,并将其导入服务器和客户端应用程序中.