我现在正在做一个类似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;
}
}现在的问题是如何在客户端与服务器端之间传送的消息是对象??????????并且在二端能读与写
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;
}
}现在的问题是如何在客户端与服务器端之间传送的消息是对象??????????并且在二端能读与写
答:当然可以传输对象。你的代码有问题。修改后如下(可正常通信):
服务器端:
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();
} }}
我好像无法实现通信啊!
服务端: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();
}
}
}
ObjectOutputStream oos=new ObjectOutputStream(socket.getOutputStream());
如果要连续传送对象,应该要做成多线程的吧... 一个线程负责收,一个线程负责发..
上一楼的代码可以成功运行...
因此:我代码中将双方的流的创建的先后次序颠倒了一下。程序正常运行并传输成功对象。