我有两个类X和Y,像这样:
class X implements Serializable
{
int val1;
Y val2;
}
class Y implements Serializable
{
int val;
}
我想将一个X类型的对象从客户端传输到服务器,但我不能,因为类X有一个类型为Y的字段。我在类X中用类型X的字段替换了类型Y的字段,它有效。
修改 这些是我的课程:
class Y implements Serializable
{
int val;
Y()
{
val = 3;
}
}
class X implements Serializable
{
int val;
Y ob;
X(int i, Y o)
{
val = i;
ob = o;
}
}
public class Server
{
public static void main(String[] s)
{
ServerSocket ss = null;
Socket cs = null;
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
try
{
ss = new ServerSocket(1234);
System.out.println("Server pornit!");
cs = ss.accept();
oos = new ObjectOutputStream(cs.getOutputStream());
ois = new ObjectInputStream(cs.getInputStream());
}
catch(Exception e)
{
System.out.println("Exceptie!");
}
System.out.println("Asteapta mesaj...");
X x;
try
{
x = (X) ois.readObject();
System.out.println(x.val);
}
catch(Exception e)
{
System.out.println(e.toString());
}
try
{
ss.close();
cs.close();
}
catch(Exception e)
{
}
}
}
public class Client
{
public static void main(String[] s)
{
Socket cs;
ObjectInputStream ois = null;
ObjectOutputStream oos = null;
System.out.println("Connect...");
try
{
cs = new Socket("127.0.0.1",1234);
oos = new ObjectOutputStream(cs.getOutputStream());
ois = new ObjectInputStream(cs.getInputStream());
}
catch(Exception e)
{
System.out.println("Exceptie!");
}
try
{
oos.writeObject(new X(8,new Y()));
}
catch(Exception e)
{
System.out.println(e.getMessage());
}
}
}
答案 0 :(得分:1)
好的我觉得我发现了问题。在关闭输出流之前,客户端进程过早终止。结果,服务器意外断开连接。将oos.close()添加到客户端代码中。
答案 1 :(得分:0)
检查远程客户端是否可以访问X和(特别是)Y的.class文件?
特别是,如果新的Y()没有成功,你就会遇到问题: - )
(你得到的错误是什么?)
答案 2 :(得分:0)
oreyes注意:移至原始帖子
答案 3 :(得分:0)
它适用于我的机器:
$javac X.java
$java Server &
[1] 14037
$Server pornit!
java Client
Connect...
Asteapta mesaj...
$8
我想知道你在启动客户端时是不是要杀了服务器。