小背景,目前正试图完成我的学位任务,试图实施一个拍卖行' localhost服务器 - 客户端程序,客户端可以在其中对服务器上保存的项目出价。当新客户端连接到服务器时,用户必须注册他/她的名称,然后服务器将向客户端发送所有项目信息。
目前所有其他信息都正确发送但是当我尝试通过ObjectOutputStream将项目的图像发送到客户端时,服务器始终无法发送ImageIcons,当我断开客户端时遇到此错误消息:< / p>
StringBuffer
我认为它可能与我试图通过输出流直接发送ImageIcons而不使用serialisable但我们的java讲师告诉我们ImageIcon并不要求它正常运行所以我可以不确定,任何建议都会很棒!我将把服务器/客户端的代码放在下面!
服务器线程代码:
int
尝试向客户发送信息:
Exception in thread "main" java.io.StreamCorruptedException: invalid type code: 53 at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at AuctionClient.retrieveItemInformation(AuctionClient.java:365)
at AuctionClient.main(AuctionClient.java:341)
客户端创建输入流:
public ClientHandler(Socket socket, BiddingItem item1, BiddingItem item2, int number) throws IOException
{
client = socket;
outputImage = new ObjectOutputStream(client.getOutputStream());
input = new Scanner(client.getInputStream());
output = new PrintWriter(client.getOutputStream(), true);
startedItem1 = item1;
startedItem2 = item2;
clientNumber = number;
images = new ImageIcon[2];
images[0] = startedItem1.getImage();
images[1] = startedItem2.getImage();
}
客户端用来接受信息的功能:
public void run()
{
//previous code...
for (int i=0; i<images.length;++i)
{
try
{
outputImage.writeObject(images[i]);
}
catch (IOException ioEx)
{
System.out.println("\n**ERROR: Unable to send Item " + i + " image to client!**");
}
try
{
outputImage.flush();
}
catch (IOException e1)
{
System.out.println("\n**ERROR: Unable to flush OutputObjectStream!**");
}
}
干杯!
中号
答案 0 :(得分:1)
问题在于:
outputImage = new ObjectOutputStream(client.getOutputStream());
// ...
output = new PrintWriter(client.getOutputStream(), true);
您无法在两个不同的包装器中包装单个OutputStream。他们的个人状态和缓冲不兼容。
特别是,如果使用ObjectOutputStream之外的任何其他内容写入单个字节,则对象流已损坏。
如果要发送对象和文本,可以将String对象写入ObjectOutputStream。您也可以直接调用ObjectOutputStream.writeUTF。
答案 1 :(得分:0)
问题解决了,删除了Printwriter&amp;扫描程序流并在客户端和服务器中使用对象流替换它们,并使用.writeObject&amp; readObject方法,我还需要确保正确实现图像的路径。谢谢你的帮助!