我现在正在做一个类似QQ的聊天工具,我打算在客户端和服务器端传送的消息是对象,但是用ObjectInputStream和ObjectOutputStream好像不能实现服务器端:package server;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;import msg.Msg;public class Server { /**
 * @param args
 */
public static void main(String[] args) {
try{
ServerSocket serverSocket=new ServerSocket(8888);
Socket socket=serverSocket.accept();
System.out.println("");

ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());

Msg m=new Msg();
m=(Msg)ois.readObject();
System.out.println("type="+m.getType());
m.setType(2);
oos.writeObject(m);


}catch(Exception e){
e.printStackTrace();
} }}客户端:
package client;
import java.net.Socket;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;import msg.Msg;
public class Client { /**
 * @param args
 */
public static void main(String[] args) {
try{
Socket socket=new Socket("127.0.0.1",8888);

ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());

Msg msg=new Msg();
msg.setType(1);
System.out.println("type1="+msg.getType());
oos.writeObject(msg);

msg=(Msg)ois.readObject();
System.out.println("type2="+msg.getType());
}catch(Exception e){
e.printStackTrace();
} }}客户端与服务器端的消息:
package msg;
import java.io.Serializable;
public class Msg implements Serializable{
private int type;
public Msg(){

}
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}


}现在的问题是如何在客户端与服务器端之间传送的消息是对象??????????并且在二端能读与写

解决方案 »

  1.   

    现在的问题是如何在客户端与服务器端之间传送的消息是对象??????????并且在二端能读与写
    答:当然可以传输对象。你的代码有问题。修改后如下(可正常通信):
    服务器端: 
    package server;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;import msg.Msg;public class Server {    /**
         * @param args
         */
        public static void main(String[] args) {
            try{
                ServerSocket serverSocket=new ServerSocket(8888);
                Socket socket=serverSocket.accept();
                System.out.println("");
                
                ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
                ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
                
                Msg m=new Msg();
                m=(Msg)ois.readObject();
                System.out.println("type="+m.getType());
                m.setType(2);
                oos.writeObject(m);
                oos.flush();
                
            }catch(Exception e){
                e.printStackTrace();
            }    }}
    客户端:package client;
    import java.net.Socket;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;import msg.Msg;
    public class Client {    /**
         * @param args
         */
        public static void main(String[] args) {
            try{
                Socket socket=new Socket("127.0.0.1",8888);
                
                
                ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
                ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
                
                Msg msg=new Msg();
                msg.setType(1);
                System.out.println("type1="+msg.getType());
                oos.writeObject(msg);
                oos.flush();
                
                msg=(Msg)ois.readObject();
                System.out.println("type2="+msg.getType());
            }catch(Exception e){
                e.printStackTrace();
            }    }}
      

  2.   

    楼上的,代码没怎么改啊,就加了flush,我都试了,和楼主一样,可以运行,但不能实现传输。感觉没错啊,怎么不行呢,期待高手!
      

  3.   

    光加它oos.flush();
    我好像无法实现通信啊!
      

  4.   

    这样就行了:
    服务端:package TestTcp;import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;public class Server {
    public static void main(String[] args){
    ObjectInputStream ois = null;
    ObjectOutputStream oos = null;
    try {
    ServerSocket ss = new ServerSocket(9527);
    Socket s = ss.accept();
    ois = new ObjectInputStream(s.getInputStream());
    Msg msg = (Msg)ois.readObject();
    System.out.println(msg.getType());
    msg.setType(2);
    oos = new ObjectOutputStream(s.getOutputStream());
    oos.writeObject(msg);
    s.close();
    ss.close();
    } catch (Exception e) {
    e.printStackTrace();

    }
    }客户端:package TestTcp;import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.Socket;public class Client {
    public static void main(String[] args){
    try {
    Socket s = new Socket("127.0.0.1",9527) ;
    Msg msg = new Msg(1);
    ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
    oos.writeObject(msg);
    ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
    msg = (Msg)ois.readObject();
    System.out.println(msg.getType());

    ois.close();
    oos.close();
    s.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    }
    }
      

  5.   

    楼主代码问题出在这:ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
                ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
    如果要连续传送对象,应该要做成多线程的吧...   一个线程负责收,一个线程负责发..
    上一楼的代码可以成功运行...  
      

  6.   

    答:当然可以传输啊。我的贴子中代码都是测试成功才会发的。你与楼主一样,没有仔细看我的程序:不仅仅是加了flush(),不能实现传输的问题的真正原因是:在创建IO流时阻塞了。
    因此:我代码中将双方的流的创建的先后次序颠倒了一下。程序正常运行并传输成功对象。