Java的插座 - 自定义对象发送 [英] Java sockets - Custom Objects Sending
本文介绍了Java的插座 - 自定义对象发送的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经创建工作的插座,当我尝试发送文字或数字,其确定,但是当我尝试把我的自定义类对象,我得到NullPointerException异常...
下面是一些code:
I have created working sockets, and when I try to send text or numbers, its ok, but when im trying to send my custom class object, i got NullPointerException... Here is some code:
public boolean SendLi(List<Entity> list)
{
try {
out.writeObject(list);
} catch (IOException e) {
e.printStackTrace();
System.err.println("Send: Error on OutputStream.write(byte[])");
}
return true;
}
public List<Entity> RecvLi()
{
List<Entity> data;
data = new ArrayList<Entity>();
try{
data = (List<Entity>) in.readObject();
} catch (IOException e) {
System.err.println("Send: Error on OutputStream.read(byte[]) - IOException");
return null;
} catch (ClassNotFoundException e) {
System.err.println("Send: Error on OutputStream.read(byte[]) - ClassNotFound");
e.printStackTrace();
}
return data;
}
其实,这code为我做列出,但我希望有一些simmilar功能发送其他对象。
感谢您的任何答复!
Actually, that code I made for Lists, but I want to have some simmilar functions to send other objects. Thanks for any replies!
推荐答案
code片段下面,我所有类型的序列化对象的作品。请查看
Code snippets below works with all kind serializable objects for me. Please check.
* IRequest是对象发送。
* IResponse为对象来获得。
*IRequest is object to send. *IResponse is object to get.
Socket clientSocket = new Socket(hostName, portNo);
clientSocket.setSoTimeout(connectionTimeout);
try {
OutputStream outputStream = clientSocket.getOutputStream();
InputStream inputStream = clientSocket.getInputStream();
ObjectOutputStream objOutputStream = new ObjectOutputStream(outputStream);
ObjectInputStream objInputStream = null;
try {
objOutputStream.writeObject(request);
objOutputStream.flush();
objInputStream = new ObjectInputStream(inputStream);
res = (IResponse) objInputStream.readObject();
} finally {
if (objOutputStream != null) {
objOutputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
if (objInputStream != null) {
objInputStream.close();
}
if (inputStream != null) {
inputStream.close();
}
}
} finally {
clientSocket.close();
clientSocket = null;
}
服务器code:
private IMessageProcessor messageProcessor = null;
private Socket clientSocket = null;
private Logger logger = null;
String clientIP = clientSocket.getInetAddress().getHostAddress();
int clientPortNr = clientSocket.getPort();
InputStream inputStream = clientSocket.getInputStream();
OutputStream outputStream = clientSocket.getOutputStream();
try {
ObjectInputStream objInputStream = null;
ObjectOutputStream objOutputStream = null;
try {
IRequest request = null;
objInputStream = new ObjectInputStream(inputStream);
objOutputStream = new ObjectOutputStream(outputStream);
request = (IRequest) objInputStream.readObject();
IResponse response = null;
try {
response = messageProcessor.processMessage(clientIP,
clientPortNr,
request,
logger);
objOutputStream.writeObject(response);
} catch (Exception ex) {
objOutputStream.writeObject(ex);
}
objOutputStream.flush();
objOutputStream.reset();
} finally {
if (objInputStream != null)
objInputStream.close();
if (objOutputStream != null)
objOutputStream.close();
}
} finally {
inputStream.close();
outputStream.close();
clientSocket.close();
}
} catch (Exception ex) {
logger.error(ex.getMessage());
}
这篇关于Java的插座 - 自定义对象发送的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文