问题描述
packageServer;importjava.io.*;importjava.net.*;importjava.util.*;publicclassServer{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubLinkedList<Socket>linkedList=newLinkedList<Socket>();ServerSocketserverSocket=null;Socketsocket=null;while(true){try{serverSocket=newServerSocket(4331);}catch(IOExceptione){//TODOAuto-generatedcatchblockSystem.out.println("正在监听");}try{System.out.println("等待客户呼叫");socket=serverSocket.accept();linkedList.addLast(socket);System.out.println("客户的地址:"+socket.getInetAddress());}catch(IOExceptione){//TODOAuto-generatedcatchblockSystem.out.println("正在等待客户");}if(socket!=null){newServerThread(socket,linkedList).start();}}}}报的错误是:Exceptioninthread"main"java.lang.ClassFormatError:Incompatiblemagicvalue1885430635inclassfileServer/Serveratjava.lang.ClassLoader.defineClass1(NativeMethod)atjava.lang.ClassLoader.defineClass(ClassLoader.java:800)atjava.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)atjava.net.URLClassLoader.defineClass(URLClassLoader.java:449)atjava.net.URLClassLoader.access$100(URLClassLoader.java:71)atjava.net.URLClassLoader$1.run(URLClassLoader.java:361)atjava.net.URLClassLoader$1.run(URLClassLoader.java:355)atjava.security.AccessController.doPrivileged(NativeMethod)atjava.net.URLClassLoader.findClass(URLClassLoader.java:354)atjava.lang.ClassLoader.loadClass(ClassLoader.java:425)atsun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)atjava.lang.ClassLoader.loadClass(ClassLoader.java:358)atsun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:482)求大神解答啊。。。。。
解决方案
解决方案二:
貌似ServerSocket和Socket写在一个程序里不太好吧,写两个程序一个Client、一个Serversocket=serverSocket.accept();应该在serverSocket=newServerSocket(4331);之前执行啊,提前监听嘛。
解决方案三:
额。。。我是写了两个啊。。。这个是服务器端的程序。等一下啊。我把源码全部粘一下。。
解决方案四:
引用1楼zpcandzhj的回复:
貌似ServerSocket和Socket写在一个程序里不太好吧,写两个程序一个Client、一个Serversocket=serverSocket.accept();应该在serverSocket=newServerSocket(4331);之前执行啊,提前监听嘛。
我是写了两个啊。。服务器端:packageServer;importjava.io.*;importjava.net.*;importjava.util.*;publicclassServer{publicstaticvoidmain(String[]args){//TODOAuto-generatedmethodstubLinkedList<Socket>linkedList=newLinkedList<Socket>();ServerSocketserverSocket=null;Socketsocket=null;while(true){try{serverSocket=newServerSocket(4331);}catch(IOExceptione){//TODOAuto-generatedcatchblockSystem.out.println("正在监听");}try{System.out.println("等待客户呼叫");socket=serverSocket.accept();linkedList.addLast(socket);System.out.println("客户的地址:"+socket.getInetAddress());}catch(IOExceptione){//TODOAuto-generatedcatchblockSystem.out.println("正在等待客户");}if(socket!=null){newServerThread(socket,linkedList).start();}}}}packageServer;importjava.net.*;importjava.io.*;importjava.util.*;importsun.org.mozilla.javascript.internal.ObjToIntMap.Iterator;publicclassServerThreadextendsThread{LinkedList<Socket>linkedlist=newLinkedList<Socket>();Socketsocket;DataOutputStreamout=null;DataInputStreamin=null;Strings=null;publicServerThread(Sockett,LinkedListlinkedList){//TODOAuto-generatedconstructorstubthis.linkedlist=linkedList;socket=t;try{in=newDataInputStream(socket.getInputStream());}catch(IOExceptione){}}publicvoidrun(){while(true){try{s=in.readUTF();System.out.println(s);System.out.println(linkedlist.size());WriteUTF();}catch(IOExceptione){//TODOAuto-generatedcatchblockSystem.out.println("用户离开");linkedlist.removeFirstOccurrence(socket);break;}}}publicvoidWriteUTF(){java.util.Iterator<Socket>it=linkedlist.iterator();while(it.hasNext()){try{Socketsocket1=it.next();System.out.println(socket1);out=newDataOutputStream(socket1.getOutputStream());out.writeUTF(s);}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}}}client端packageClient;importjava.net.*;importjava.awt.*;importjava.io.*;importjava.awt.event.*;importjavax.swing.*;publicclassWindowsClientextendsJFrameimplementsRunnable,ActionListener{privatestaticfinallongserialVersionUID=1L;JButtonconnection,send;JTextFieldinputText;JTextAreashowResult;Socketsocket=null;DataInputStreamin=null;DataOutputStreamout=null;Threadthread;publicWindowsClient(){socket=newSocket();connection=newJButton("连接服务器");send=newJButton("发送");send.setEnabled(false);inputText=newJTextField(15);showResult=newJTextArea();add(connection,BorderLayout.NORTH);JPanelpSouth=newJPanel();pSouth.add(newJLabel("输入内容"));pSouth.add(inputText);pSouth.add(send);add(pSouth,BorderLayout.SOUTH);add(newJScrollPane(showResult),BorderLayout.CENTER);connection.addActionListener(this);send.addActionListener(this);thread=newThread(this);setBounds(10,30,460,400);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}publicvoidrun(){//TODOAuto-generatedmethodstubStrings=null;doubleresult=0;while(true){try{s=in.readUTF();showResult.append("n"+s);}catch(IOExceptione){//TODOAuto-generatedcatchblockshowResult.setText("已与服务器断开连接"+e);socket=newSocket();break;}}}publicvoidactionPerformed(ActionEvente){//TODOAuto-generatedmethodstubif(e.getSource()==connection){try{InetAddressaddress=InetAddress.getByName("127.0.0.1");;InetSocketAddresssocketAddress=newInetSocketAddress(address,4331);socket.connect(socketAddress);in=newDataInputStream(socket.getInputStream());out=newDataOutputStream(socket.getOutputStream());send.setEnabled(true);if(!thread.isAlive()){thread.start();}}catch(Exceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();socket=newSocket();}}if(e.getSource()==send){try{Strings=inputText.getText().trim();out.writeUTF(s);}catch(IOExceptione1){//TODOAuto-generatedcatchblocke1.printStackTrace();}}}}
解决方案五:
引用1楼zpcandzhj的回复:
貌似ServerSocket和Socket写在一个程序里不太好吧,写两个程序一个Client、一个Serversocket=serverSocket.accept();应该在serverSocket=newServerSocket(4331);之前执行啊,提前监听嘛。
而且不应该先new一个serverSocket,才能执行之后的serverSocket.accept()啊。。。怎么能放在new之前呢。。。
解决方案六:
只能帮顶了,小弟不太看懂你的程序
解决方案七:
只能帮顶了,小弟不太看懂你的程序
解决方案八:
首先我没有出现你说的问题,其次你客户端写的socket有问题,无法连接到server上,还有就是你的窗口发送按钮一直是灰色的,无法进行数据发送
解决方案九:
引用7楼yankaiwuzhengbo的回复:
首先我没有出现你说的问题,其次你客户端写的socket有问题,无法连接到server上,还有就是你的窗口发送按钮一直是灰色的,无法进行数据发送
我自己修改了一下子没问题啊,也没有改动太多,就是将你send.setEnabled(true);里面置为了true,以前没接触过awt
解决方案十:
引用8楼yankaiwuzhengbo的回复:
Quote: 引用7楼yankaiwuzhengbo的回复:
首先我没有出现你说的问题,其次你客户端写的socket有问题,无法连接到server上,还有就是你的窗口发送按钮一直是灰色的,无法进行数据发送我自己修改了一下子没问题啊,也没有改动太多,就是将你send.setEnabled(true);里面置为了true,以前没接触过awt
好的~谢谢哦~因为最近在搞Oracle所以没太看到~
解决方案十一:
魔数不正确。你改过CLASS文件了么?.class文件必须以0xCAFEBABE开头,不然就直接报错了。你的编译工具是特别的么?