问题描述
我写了两个JAVA,UdpServer和UdpClient,分别在两台机子上:publicclassUdpServer{publicstaticvoidmain(String[]args){DatagramSocketserverSocket=null;try{serverSocket=newDatagramSocket(10081);byte[]receiveData=newbyte[1600];byte[]sendData=newbyte[1024*10];while(true){DatagramPacketreceivePacket=newDatagramPacket(receiveData,receiveData.length);serverSocket.receive(receivePacket);InetAddressIPAddress=receivePacket.getAddress();intport=receivePacket.getPort();System.out.println("*******************udppackagesending.....:*****************"+port);Stringresult="hello,world";sendData=result.getBytes();DatagramPacketsendPacket=newDatagramPacket(sendData,sendData.length,IPAddress,port);serverSocket.send(sendPacket);}}catch(IOExceptione){e.printStackTrace();}finally{if(serverSocket!=null){serverSocket.close();serverSocket=null;}}}}classUdpClient{publicstaticvoidmain(String[]args)throwsIOException{while(true){DatagramSocketclient=newDatagramSocket();StringsendStr="Hello!I'mClient";byte[]sendBuf;sendBuf=sendStr.getBytes();InetAddressaddr=InetAddress.getByName("10.12.22.91");intport=10081;DatagramPacketsendPacket=newDatagramPacket(sendBuf,sendBuf.length,addr,port);client.send(sendPacket);byte[]recvBuf=newbyte[11000];DatagramPacketrecvPacket=newDatagramPacket(recvBuf,recvBuf.length);client.receive(recvPacket);StringrecvStr=newString(recvPacket.getData(),0,recvPacket.getLength());System.out.println("Receive:"+recvStr+"clientport:"+client.getPort());client.close();}}}分别在两台机子上编译后运行,当服务器中的result比较大的时候,运行到一段时间,程序就不跑了。我通过netstat-antup|grepjava发现UdpClient的端口没有正常释放,导致程序僵死在那里。请问,如何解决这个问题,如果释放掉那个端口?
解决方案
解决方案二:
可以把DatagramSocketclient=newDatagramSocket();放到while循环外面去
解决方案三:
引用1楼UDBuilder的回复:
可以把DatagramSocketclient=newDatagramSocket();放到while循环外面去
同理,先这样试下