【发布时间】:2014-10-18 19:04:07
【问题描述】:
我正在尝试使用 Java 通过连接发送对象。这是我的客户端代码。服务器第一次收到数据,第二次卡在socket.accept()。我在这里做错了吗?谢谢!
public class Client
{
public static void main(String args[])
{
try
{
Socket socket = new Socket("localhost", 40003);
ClientObject c = new ClientObject(socket);
c.init();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
class ClientObject
{
Socket socket;
public ClientObject(Socket socket)
{
this.socket = socket;
}
public void init()
{
try
{
// computation
SendObject so = new SendObject(toSend1, toSend2, rand, username.length());
// send all of this
OutputStream o = socket.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(o);
oos.writeObject(so);
o.flush();
InputStream i = socket.getInputStream();
ObjectInputStream ois = new ObjectInputStream(i);
// works, data received from the server
so = (SendObject)ois.readObject();
// further computation
so = new SendObject(null, digest, rand + 1, -1);
oos.reset();
oos.writeObject(so);
// doesn't work :(
o.flush();
}
}
【问题讨论】:
-
你确定是客户端不工作?
-
服务器端卡在
accept()方法。我推断客户端没有发送任何数据。服务器端会不会有问题?我正在使用线程.. -
几年前我试图做你正在做的同样的事情,我在对象流中遇到了类似的问题......如果可能的话,我建议使用 JSON 进行序列化,而不是比java对象序列化。
-
会试一试,因为这令人沮丧。你能给我一个好的链接开始吗?图书馆,也许?干杯
-
如果服务器已经成功接收并发回了一个SendObject,怎么会卡在accept?连接已被接受很长时间。显示服务器代码。
标签: java sockets outputstream objectoutputstream