这个问题主要是关于Socket的流
ObjectOutputStream
和ObjectInputStream
我写些主要的步骤:1)服务器:
ListenThread.serversocket=new ServerSocket(Config.port);
Socket clientsocket=serversocket.accept();
(new MainThread(clientsocket)).start();2)客户端
socket = new Socket(ip,port); //连接
this.in = socket.getInputStream();
this.din = new DataInputStream(in);
this.objectInStream=new ObjectInputStream(in);
this.out=socket.getOutputStream();
this.dout=new DataOutputStream(out);
this.objectStream=new ObjectOutputStream(out);//登陆
dout.writeUTF(Constant.CMD_LOGIN);
dout.writeInt(id);
dout.writeUTF(password);
dout.writeInt(stat);int msg = din.readInt(); //等待读取登陆结果Socket连接正常但是客户端等待读取这里很奇怪....
如果把客户端那句this.objectStream=new ObjectOutputStream(out);删除了
就一点问题都没有。但是如果加上了,就在读这里阻塞了
可以保证服务器一点问题都没有,也可以保证收发次序一样....
因为如果删除
this.objectStream=new ObjectOutputStream(out); 其他的聊天什么的都可以..
我就是不明白这句话为什么会有这么大的作用??
即使根本没有调用过this.objectStream
请教大家
ObjectOutputStream
和ObjectInputStream
我写些主要的步骤:1)服务器:
ListenThread.serversocket=new ServerSocket(Config.port);
Socket clientsocket=serversocket.accept();
(new MainThread(clientsocket)).start();2)客户端
socket = new Socket(ip,port); //连接
this.in = socket.getInputStream();
this.din = new DataInputStream(in);
this.objectInStream=new ObjectInputStream(in);
this.out=socket.getOutputStream();
this.dout=new DataOutputStream(out);
this.objectStream=new ObjectOutputStream(out);//登陆
dout.writeUTF(Constant.CMD_LOGIN);
dout.writeInt(id);
dout.writeUTF(password);
dout.writeInt(stat);int msg = din.readInt(); //等待读取登陆结果Socket连接正常但是客户端等待读取这里很奇怪....
如果把客户端那句this.objectStream=new ObjectOutputStream(out);删除了
就一点问题都没有。但是如果加上了,就在读这里阻塞了
可以保证服务器一点问题都没有,也可以保证收发次序一样....
因为如果删除
this.objectStream=new ObjectOutputStream(out); 其他的聊天什么的都可以..
我就是不明白这句话为什么会有这么大的作用??
即使根本没有调用过this.objectStream
请教大家
writeObject 方法用于将对象写入流中。所有对象(包括 String 和数组)都可以通过 writeObject 写入。可将多个对象或基元写入流中。必须使用与写入对象时相同的类型和顺序从相应 ObjectInputstream 中读回对象。
我把一个包含图片的对象通过ObjectOutputStream() writeObject()后发给好友,中间
服务器接收到正常,再转发给你的好友也OK;
但是第二次,我改变了内容(包括图片),再发送。服务器接收到的还是上一次的内容...不知道为什么我在writeObject()后添加了flush().服务器竟然都接收不到了
。。郁闷啊.....
我感觉可能是缓冲区的问题.....
但为什么FLUSH()之后,那边会有问题
感觉Socket里面的流很不好用....
TCP数据包的最大数据量也就是65536字节,大约64KB,如果一次传输的数据过大,很可能就接受不到了,最好还是分块传送。
up