问题描述
privatevoidInit(){try{server=newServerSocket(Integer.valueOf(Source.getCfg("socket.port")));System.out.println("开始监听端口:【"+server.getLocalPort()+"】等待客户机连接....");exec=Executors.newFixedThreadPool(pool);while(!this.flag){Listen();}}catch(IOExceptionex){Logger.getLogger(_SocketListen.class.getName()).log(Level.SEVERE,null,ex);}}privatevoidListen()throwsIOException{Socketsocket=server.accept();//这里异常this.setNum(num++);this.setFlag(false);_SocketThreadt=ClassManager.get_SocketThread();t.setNum(this.num);t.setSocket(socket);exec.execute(t);}publicvoidClose(){try{this.setFlag(true);exec.shutdown();server.close();}catch(Exceptionex){Logger.getLogger(_SocketListen.class.getName()).log(Level.SEVERE,null,ex);}}现在服务端与客户端建立了连接但上面Close()一执行就出异常java.net.SocketException:socketclosed
解决方案
解决方案二:
检查端口在使用前是否有关闭操作.
解决方案三:
java.net.SocketException:socketclosedsocket关闭异常,调试下看,是不是server已经为null了。这种问题一般调试就能解决的
解决方案四:
引用1楼hpjianhua的回复:
检查端口在使用前是否有关闭操作.
在执行上面Close方法前有个下面方法里面的socket关闭操作但是不执行socket关闭操作也会出现异常,server.close();//这行注释掉就没异常了privatevoidListen()throwsIOException{Socketsocket=server.accept();//这里异常this.setNum(num++);this.setFlag(false);_SocketThreadt=ClassManager.get_SocketThread();t.setNum(this.num);t.setSocket(socket);exec.execute(t);}
解决方案五:
引用2楼xzy88的回复:
java.net.SocketException:socketclosedsocket关闭异常,调试下看,是不是server已经为null了。这种问题一般调试就能解决的
server=newServerSocket(Integer.valueOf(Source.getCfg("socket.port")));Socketsocket=server.accept();如果建立连接server会变成null?
解决方案六:
System.out.println(server.isClosed());结果为true而且server也不null
解决方案七:
把client的代码发上来,看是不是client的问题呢。。
解决方案八:
引用6楼liuzhengkang的回复:
把client的代码发上来,看是不是client的问题呢。。
publicclass_SocketClientextendsSwingWorkerimplementsjava.awt.event.ActionListener{privateSocketsocket;privateOutputStreamout;privateInputStreamin;privateTimert;privatevoidConnection()throwsException{socket=newSocket(MResource.getCfg("socket.ip"),Integer.valueOf(MResource.getCfg("socket.port")));if(socket.isConnected()){if(t!=null){t.stop();}System.out.println("OK"+socket);}}publicvoidClose(){try{if(socket!=null||socket.isConnected()){socket.close();}}catch(IOExceptionex){Logger.getLogger(_SocketClient.class.getName()).log(Level.SEVERE,null,ex);}}@OverrideprotectedObjectdoInBackground(){try{Connection();}catch(Exceptionex){//Logger.getLogger(_SocketClient.class.getName()).log(Level.SEVERE,null,ex);t=newTimer(2000,this);t.start();}return"";}publicvoidactionPerformed(ActionEvente){try{Connection();}catch(Exceptionex){//Logger.getLogger(_SocketClient.class.getName()).log(Level.SEVERE,null,ex);System.out.println("尝试连接....");}}}
解决方案九:
但上面Close()一执行就出异常java.net.SocketException:socketclosed客户端报java.net.SocketException:socketclosed是正常的