java.io.StreamCorruptedException: invalid type code: AC我真的无能为力了,能帮帮我吗?

问题描述

在一台电脑上实现,客户端的端口不一样,至少要两个客户端才能实现?异常在Client50中由衷感谢服务器importjava.io.*;importjava.net.*;importjava.util.ArrayList;importjava.util.Collection;importjava.util.Scanner;classUserimplementsSerializable{privateStringname;privateInetAddressid;privateintport;publicUser(Stringname,InetAddressid,intport){setName(name);setId(id);setPort(port);}publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=name;}publicInetAddressgetId(){returnid;}publicvoidsetId(InetAddressid){this.id=id;}publicintgetPort(){returnport;}publicvoidsetPort(intport){this.port=port;}}//输出线程classWriterextendsThread{privateObjectOutputStreamoos=null;privatePipedInputStreampis=null;publicWriter(ObjectOutputStreamoos){this.oos=oos;}publicvoidrun(){try{while(true){pis=newPipedInputStream();inti=0;byteb[]=newbyte[1024];intn=0;for(;(i=pis.read())!=-1;n++){b[n]=(byte)i;}oos.write(b,0,n);oos.flush();}}catch(Exceptione){e.printStackTrace();}}publicPipedInputStreamgetPis(){returnpis;}publicvoidsetPis(PipedInputStreampis){this.pis=pis;}}//输入线程classSendsextendsThread{privateObjectInputStreamois=null;privatePipedOutputStreampos=null;publicSends(ObjectInputStreamois){this.ois=ois;}publicvoidrun(){try{while(true){byteb[]=(byte[])ois.readObject();pos=newPipedOutputStream();setPos(pos);pos.write(b);}}catch(Exceptione){e.printStackTrace();}}publicPipedOutputStreamgetPos(){returnpos;}publicvoidsetPos(PipedOutputStreampos){this.pos=pos;}}classReaderextendsThread{privateintport=1;privatestaticintn=0;publicReader(){}publicvoidrun(){try{while(true){//但n等于一的是后开始执行for(inti=0;i<=n;i++){Objecto=ChatRoomCase5.ois.get(i).readObject();if(o!=null){for(intj=0;j<=n;j++){intp=(ChatRoomCase5.user.get(j)).getPort();if(o==(Object)p){//记录客户输入的内容判断是谁的端口号setOis(ChatRoomCase5.ois.get(i));//这是自己的输入流setPort(p);//这是别人的端口号yield();}}}}}}catch(Exceptione){e.printStackTrace();}}ObjectInputStreamo=null;publicObjectInputStreamgetOis(){returno;}publicvoidsetOis(ObjectInputStreamois){this.o=ois;}publicintgetPort(){returnthis.port;}publicvoidsetPort(intport){this.port=port;}}classChatRoomCase5{privateServerSocketserver=null;privateSocketsocket[]=null;staticArrayList<ObjectInputStream>ois=newArrayList();staticArrayList<ObjectOutputStream>oos=newArrayList();staticArrayList<User>user=newArrayList();privatestaticinti=0;publicChatRoomCase5(){try{server=newServerSocket(5000,45);socket=newSocket[45];while(true){if(i<45){socket[i]=server.accept();//连接服务器System.out.println("-------1-------");ois.add(newObjectInputStream(newBufferedInputStream(socket[i].getInputStream())));oos.add(newObjectOutputStream(socket[i].getOutputStream()));System.out.println("-------2-------");user.add((User)ois.get(i).readObject());//服务器获取用户的信息反序列化System.out.println("-------3-------");System.out.println("-------4-------");System.out.println(user.get(i).getName()+"已经登录;");Strings=""+user.get(i).getName()+"上线了";if((i>=1)&&(i<45)){anline(s,socket[i]);//通知各个用户有人已经上线了sendM();}i++;}}}catch(Exceptione){e.printStackTrace();}}publicvoidsendM(){try{Readerr=newReader();r.start();//等待每个用户输入的第一条信息if(r.isInterrupted()){inti=r.getPort();Objecto="你已经和端口号为"+i+"连接上了,可以聊天了";System.out.println("-----6----"+i);oos.get(i-5001).writeObject(o);sender(r.getOis(),i);sendM();}}catch(Exceptione){e.printStackTrace();}}//接受每个人发过来的信息publicvoidsender(ObjectInputStreamo,intp){try{Writerw=newWriter(oos.get(p-5001));Sendss=newSends(o);s.getPos().connect(w.getPis());w.start();s.start();}catch(Exceptione){e.printStackTrace();}}publicvoidanline(Objecto,Socketsoc){//向每个人通知自己上线了try{for(inti=0;i<45;i++){if((socket[i]!=null)&&(socket[i]!=soc)){ObjectOutputStreamoos=newObjectOutputStream(socket[i].getOutputStream());oos.writeObject(o);System.out.println("-------5-------");}else{continue;}}}catch(Exceptione){e.printStackTrace();}}}publicclassChatRoom5{publicstaticvoidmain(Stringagrs[]){newChatRoomCase5();}}客户端importjava.io.BufferedInputStream;importjava.io.ObjectInputStream;importjava.io.ObjectOutputStream;importjava.net.InetAddress;importjava.net.Socket;importjava.util.Scanner;classSend5extendsThread{privateObjectOutputStreamoos=null;publicSend5(ObjectOutputStreamoos){this.oos=oos;}publicsynchronizedvoidrun(){try{while(true){Objecto=newScanner(System.in).next();oos.writeObject(o);oos.flush();}}catch(Exceptione){e.printStackTrace();}}}classRead5extendsThread{ObjectInputStreamois=null;publicRead5(ObjectInputStreamois){this.ois=ois;}publicsynchronizedvoidrun(){try{while(true){if(ois!=null)System.out.println(ois.readObject());}}catch(Exceptione){e.printStackTrace();}}}classClientCase5{privateSocketsocket=null;privateObjectOutputStreamoos=null;privateObjectInputStreamois=null;Useru=null;publicClientCase5(){try{this.socket=newSocket(InetAddress.getLocalHost(),5000,InetAddress.getLocalHost(),5001);System.out.println("-------1-------");oos=newObjectOutputStream(socket.getOutputStream());ois=newObjectInputStream(newBufferedInputStream(socket.getInputStream()));System.out.println("-------2-------");u=newUser("菜鸟莱特",InetAddress.getLocalHost(),5001);Objecto=u;oos.writeObject(o);System.out.println("-------3-------");newSend5(oos).start();newRead5(ois).start();}catch(Exceptione){e.printStackTrace();}}}publicclassClient50{publicstaticvoidmain(Stringagrs[]){newClientCase5();}}

解决方案

解决方案二:
太长了帮顶了
解决方案三:
谢谢,不长就是,有一个异常java.io.StreamCorruptedException:invalidtypecode:AC解决不了
解决方案四:
出错原因是在online方法取oos的地方,因为你对同一个socket.getOutputStream()做了两次封装,所以出错。修改方法是从ArrayList<ObjectOutputStream>里取出oospublicvoidonline(Objecto,Socketsoc){try{for(inti=0;i<45;i++){if((socket[i]!=null)&&(socket[i]!=soc)){ObjectOutputStreamoos=outputList.get(i);//这边直接取已经封装好的oosoos.writeObject(o);logger.info("---------5-------");}}}catch(Exceptione){e.printStackTrace();}}

时间: 2024-08-28 19:26:36

java.io.StreamCorruptedException: invalid type code: AC我真的无能为力了,能帮帮我吗?的相关文章

java.io.StreamCorruptedException: invalid type code: 62

问题描述 EJB+JBoss+SwingEJB部署在JBoss中,Swing调用EJB中的一个方法A(List<Object) lists),之后就报java.io.StreamCorruptedException: invalid type code: 62. 所传递的集合lists中起初包含一个未序列化的对象,但是我在调用A方法前将其移除后,还是报java.io.StreamCorruptedException: invalid type code: 62.请大家指点下 问题补充:Excep

source-Java出现了java.io.StreamCorruptedException

问题描述 Java出现了java.io.StreamCorruptedException java.io.StreamCorruptedException: invalid type code: 00 如题,我是在做模拟ATM的时候遇到问题 具体问题:java.io.StreamCorruptedException: invalid type code: 00 at java.io.ObjectInputStream.readObject0(Unknown Source) at java.io.

android开发-java服务器端出错java.io.StreamCorruptedException

问题描述 java服务器端出错java.io.StreamCorruptedException 报错信息:java.io.StreamCorruptedException: invalid stream header: 64000000 at java.io.ObjectInputStream.readStreamHeader(Unknown Source) at java.io.ObjectInputStream.(Unknown Source) at org.lxh.server.Serve

java-invalid type code: AC 很奇怪

问题描述 invalid type code: AC 很奇怪 最近在学习网络通信.然后弄一个服务器端不断监听,客户端连接,然后也处于不断监听服务端返回的消息.本来应很简单.但在客户端的监听线程里.第一次发送消息,服务器收到,并原消息返回,没问题.第二次,服务器能收到,但返回,客户端没收到,并出现:invalid type code: AC 这样都异常. 在网上查了好多问题,基本就两种,一种是 ObjectInputStream 多次定义,一种是 序列化问题.但是我两种都坚持尝试,都是不行. 如下

socket-android写个注册程序时报java.io.StreamCorruptedException

问题描述 android写个注册程序时报java.io.StreamCorruptedException 求大神帮忙看一看,困了好久了,还是解决不了,先上点代码 public void onClick(View v) { if (!userpassword1.getText().toString() .equals(userpassword2.getText().toString())) { Toast.makeText(RegActivity.this, "密码不一致!", Toas

manifest mf-Exception in thread &amp;amp;quot;main&amp;amp;quot; java.io.IOException: invalid manifest format

问题描述 Exception in thread "main" java.io.IOException: invalid manifest format fat打包后执行: @echo off set JAVA_HOME=D:studyworktmsjdk1.6.0_02 %JAVA_HOME%binjava -jar -Xms64m -Xmx512m ezTMS2.0-GpsServer_fat.jar @echo on 出现错误: Ensure that the manifest

javase-Invalid type code: 71

问题描述 Invalid type code: 71 java.io.StreamCorruptedException: Invalid type code: 71这个代码是什么错误 在Oracle上根本找不到有关这个invalid type code:71的任何描述. 所以求大神们解答啊... 解决方案 不管是什么错误,反正是序列化的文件格式不对,要不然就是你的类型不是你序列化的类型. 解决方案二: 编译环境还不清楚,不知道如何分析 解决方案三: http://stackoverflow.co

java io对象流问题

问题描述 我把一个对象用Objectoutputstream,对象流写进文本里,然后还写入了一些其他的文字,不是对象,我在读取这个文件的时候读出了这个对象后剩下的文字应该怎么读出来?能换输入流吗?我用Objectinputstream读对象后,再读内容报错了Exceptioninthread"main"java.io.StreamCorruptedException:invalidtypecode:D3 解决方案 解决方案二:再换输入流,怎么定位那个不是对象的字符?一般写入对象,即对象

java IO &amp;amp; NIO

IO.....      java.io.*     使用参考:http://www.cnblogs.com/rollenholt/archive/2011/09/11/2173787.html 类分层结构 java.lang.Object java.io.File (implements java.lang.Comparable<T>, java.io.Serializable) java.io.FileDescriptor java.io.InputStream (implements j