如何在CS通讯下传递对象,高分求解 老兄,看看序列化和反序列化就知道了要不你可以采用RMI,底层封装了,但对于小程序代价太大了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 http://www-900.ibm.com/developerWorks/index.shtml上面有讲述怎样利用TCP/IP来传递对象。GOOD LUCK! YourObject yourObj = ...;ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());oos.writeObject(yourObj);ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());YourOubject obj = (YourObject)ois.readObject();ois.close();YourObject必须implements java.io.Serializable 或 java.io.Externalizable 理论上只要implements Serializable就可以用socket的。不知道你说的不可以是什么不可以?传不过去?还是别的。你的server端代码是否已经执行监听?端口设置正确否? kkhui(jacky)没有问题的。关于使用socket在cs模式下传递对象实例我自己写程序试过,传递一个文件到server端,绝对没有问题,检查你的程序吧。 socket可以连接,但是writeobject时,程序就不动了。不知道为什么,是不是需要flush()啊这种强制的命令啊。我不是很懂。 你传的是什么对象。我测试传一个Vector,可以。客户端:import java.io.*;import java.net.*;import java.util.Vector;public class TestSocketClient{ Socket mSocket = null; DataInputStream dis = null; DataOutputStream dos = null; Vector mVector = new Vector(5,1); public TestSocketClient(String [] args) { mVector.addElement("aa"); mVector.addElement("bb"); try { mSocket = new Socket("192.188.0.5",9009); dos = new DataOutputStream(mSocket.getOutputStream()); ObjectOutputStream oos = new ObjectOutputStream(dos); oos.writeObject(mVector); } catch(Exception eSocket) { } } public static void main(String [] args) { new TestSocketClient(args); }} 服务端:package pSocket;import java.io.*;import java.net.*;import java.util.Vector;/** * * <p>Title: </p> * <p>Description: </p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: </p> * @author unascribed * @version 1.0 */public class TestSocketServer{ ServerSocket mServerSocket = null; Socket mSocket = null; public Vector mAllClientVector = new Vector(5,2);//存放所有客户端信息 public TestSocketServer() { try { mServerSocket = new ServerSocket(9009,15); mSocket = mServerSocket.accept(); ReceiveClientThread rCT = new ReceiveClientThread(this,mSocket); rCT.start(); } catch(Exception eSocket) { } } public static void main(String [] args) { new TestSocketServer(); }}class ReceiveClientThread extends Thread{ private TestSocketServer mTestSocketServer = null; private Socket mSocket = null; private boolean mRunning = true; DataInputStream dis = null; DataOutputStream dos = null; Vector mVector = null; public ReceiveClientThread(TestSocketServer pTestSocketServer,Socket pSocket) { this.mTestSocketServer = pTestSocketServer; this.mSocket = pSocket; } public void run() { while(true) { if(!mRunning) { //在内存中删除相应的客户端信息 break; } try { dis = new DataInputStream(mSocket.getInputStream()); ObjectInputStream ois = new ObjectInputStream(dis); mVector = (Vector)ois.readObject(); for(int i = 0 ; i < mVector.size(); i ++) { System.out.println(mSocket.getInetAddress().getHostAddress()+"输出:" + (String)mVector.elementAt(i)); } //保存客户端信息:存入文件或临时内存中 this.mTestSocketServer.mAllClientVector.addElement(mVector); //把mAllClientVector中的所有信息返回给客户端 } catch(Exception iDios) { } } }} 恩?我怎么照你差不多的样子写不行呢??会不会writeobject写出的只是个句柄啊…… javamail包导入问题 jcreator环境下的事件监听有问题,帮忙查错 求助 要交作业了,菜鸟问题,急救!!!! 如何把一个对象转化成的字符串再转化回来 王文友请进 关于package语句的作用 疑惑:java初学者 线程同步问题 这个字符串的问题 搞得头疼死也想不明白 求指教! 关于HashSet的问题? 大家谈谈从PB到java的路
上面有讲述怎样利用TCP/IP来传递对象。
GOOD LUCK!
oos.writeObject(yourObj);ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());YourOubject obj = (YourObject)ois.readObject();
ois.close();
YourObject必须implements java.io.Serializable 或 java.io.Externalizable
不知道你说的不可以是什么不可以?
传不过去?还是别的。你的server端代码是否已经执行监听?端口设置正确否?
kkhui(jacky)没有问题的。关于使用socket在cs模式下传递对象实例我自己写程序试过,传递一个文件到server端,绝对没有问题,检查你的程序吧。
import java.io.*;
import java.net.*;
import java.util.Vector;public class TestSocketClient
{
Socket mSocket = null;
DataInputStream dis = null;
DataOutputStream dos = null;
Vector mVector = new Vector(5,1);
public TestSocketClient(String [] args)
{
mVector.addElement("aa");
mVector.addElement("bb");
try
{
mSocket = new Socket("192.188.0.5",9009); dos = new DataOutputStream(mSocket.getOutputStream());
ObjectOutputStream oos = new ObjectOutputStream(dos);
oos.writeObject(mVector);
}
catch(Exception eSocket)
{
}
} public static void main(String [] args)
{ new TestSocketClient(args);
}
}
import java.net.*;
import java.util.Vector;/**
*
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
*/public class TestSocketServer
{
ServerSocket mServerSocket = null;
Socket mSocket = null;
public Vector mAllClientVector = new Vector(5,2);//存放所有客户端信息 public TestSocketServer()
{
try
{
mServerSocket = new ServerSocket(9009,15);
mSocket = mServerSocket.accept();
ReceiveClientThread rCT = new ReceiveClientThread(this,mSocket);
rCT.start();
}
catch(Exception eSocket)
{
}
} public static void main(String [] args)
{
new TestSocketServer();
}
}class ReceiveClientThread extends Thread
{
private TestSocketServer mTestSocketServer = null;
private Socket mSocket = null;
private boolean mRunning = true;
DataInputStream dis = null;
DataOutputStream dos = null;
Vector mVector = null;
public ReceiveClientThread(TestSocketServer pTestSocketServer,Socket pSocket)
{
this.mTestSocketServer = pTestSocketServer;
this.mSocket = pSocket;
} public void run()
{
while(true)
{
if(!mRunning)
{
//在内存中删除相应的客户端信息
break;
}
try
{
dis = new DataInputStream(mSocket.getInputStream());
ObjectInputStream ois = new ObjectInputStream(dis);
mVector = (Vector)ois.readObject();
for(int i = 0 ; i < mVector.size(); i ++)
{
System.out.println(mSocket.getInetAddress().getHostAddress()+"输出:" + (String)mVector.elementAt(i));
}
//保存客户端信息:存入文件或临时内存中
this.mTestSocketServer.mAllClientVector.addElement(mVector);
//把mAllClientVector中的所有信息返回给客户端
}
catch(Exception iDios)
{
}
}
}}
会不会writeobject写出的只是个句柄啊……