Java UDP 进程僵死

问题描述

我写了两个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循环外面去

同理,先这样试下

时间: 2024-08-02 08:46:23

Java UDP 进程僵死的相关文章

Android利用LocalSocket实现Java端进程与C端进程之间的IPC

Android是建立在Linux之上的OS,在涉及到安全.网络协议.文件加密等功能时,往往需要通过C语言调用底层API来实现,而如何发出指令让C端执行我们想要的功能,并且在执行之后有返回结果呢,这就需要打通Java端进程和C端进程,使之能高效地通信.这样,C端进程用于实现功能,Java端进程负责UI.功能的触发及结果处理就可以了. 对于*nix系统来说,"一切皆为文件",Socket也不例外,Socket按照收发双方的媒介来说有三种类型:1,通过网络端口:2,通过文件系统:3,通过内存

谁知道java管道进程间怎么调用?注意是进程间!!

问题描述 谁知道java管道进程间怎么调用?注意是进程间!! 谁知道java管道进程间怎么调用?注意是进程间!!不要有c程序出现,只要java的,谢谢!!!! 解决方案 我也想知道111111 解决方案二: 进程间的通信:管道进程间的通信:管道

自己写了一个关于java UDP传输文件的代码,运行不了,没有错误,不知道哪里出问题了,求助!

问题描述 自己写了一个关于java UDP传输文件的代码,运行不了,没有错误,不知道哪里出问题了,求助! 发送端: import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream

网络编程-JAVA udp协议 服务器端无法接受数据

问题描述 JAVA udp协议 服务器端无法接受数据 我用UDP协议,写了客服端和服务器端的demo,可是服务器端一直无法receive DatagramPacket. 我在防火墙和360等杀毒软件都关的情况下,任然无法解决. 服务器代码: ```public static void main(String[] args) throws IOException { // TODO Auto-generated method stub DatagramSocket ds = new Datagra

Java的进程内缓存框架:EhCache (转)

EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. Ehcache缓存的特点: 1. 快速. 2. 简单. 3. 多种缓存策略 4. 缓存数据有两级:内存和磁盘,因此无需担心容量问题 5. 缓存数据会在虚拟机重启的过程中写入磁盘 6. 可以通过RMI.可插入API等方式进行分布式缓存 7. 具有缓存和缓存管理器的侦听接口 8. 支持多缓存管理器实例,以及一个实例的多个缓存区域 9. 提供Hibernate的缓存实现  

java源码-Java有关进程的操作,菜鸟一只,请求外援

问题描述 Java有关进程的操作,菜鸟一只,请求外援 Java如何随机生成若干进程,在创建的时候怎么确定每个进程的指令数,每个进程的指令数也是随机产生,并保存到文件中,进程和指令是如何写入文件的,文件是如何创建的 解决方案 楼主你的需求不明确啊,java本身就是一个进程,怎么能在java中生成进程呢?java是提供了调用系统进程的方法了的是Runtime类的exec方法. 文件的创建,先了解下java的IO相关的API就可以了.

[Java]UDP通信的简单例子

package com.sjf; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.InetSocketAddress; import java.net.SocketException; /** * @time 2015-05-27 * @desc UDP通信 * @auth

Java UDP小结

一. UDP协议定义 UDP协议的全称是用户数据报,在网络中它与TCP协议一样用于处理数据包.在OSI模型中,在第四层--传输层,处于IP协议的上一层.UDP有不提供数据报分组.组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的.                                                                                                                    

Java一个进程监视另一个程序的数据

问题描述 有Java程序A,在扫描一个网站所有的URI.有Java程序B,当A扫到一个URI时,B想立刻得到.请问该怎么实现. 解决方案 解决方案二:可以考虑多线程,程序B放在一个线程中,不断地对程序A扫描所得到的URI进行验证,如果发现不为空,则获得解决方案三:可是B怎么获取A得到的URI,这是问题的关键.解决方案四:引用1楼sima1989的回复: 可以考虑多线程,程序B放在一个线程中,不断地对程序A扫描所得到的URI进行验证,如果发现不为空,则获得 可是B怎么获取A得到的URI?这是问题的