 
		五竹
2015-09-06 17:40
想要实现多线程的话,服务器应该需要循环侦听等待客户端的连接吧?可是UDP的数据报如何像TCP的输入流那样,拥有一个终止的判断条件(while(...) != null)呢?如果没有终止条件,循环侦听就真正陷入死循环了……
 
				比较蛋疼,估计是引用对象太多了,而tcp中客户端未连接他就不建立线程,但是UDP一直引用对象建立线程,导致CPU飙升
 
				可以在while循环语句里添加 break; 语句块
 
				UDPServer.java //服务端
========================================
package UDP;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPServe {
	public static void main(String[] args) {
		try {
			DatagramSocket socket = new DatagramSocket(9099);
			System.out.println("Serve is waiting...");
			byte[] data = null;
			DatagramPacket packet = null;
			while (true) {
				data = new byte[1024];
				packet = new DatagramPacket(data, data.length);
				socket.receive(packet);
				UDPServeThread thread = new UDPServeThread(socket, data, packet);
				thread.start();
			}
			// socket.receive(packet);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
UDPServerThread.java   //服务线程
package UDP;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPServeThread extends Thread {
	DatagramSocket socket = null;
	byte[] data = null;
	DatagramPacket packet = null;
	public UDPServeThread(DatagramSocket socket, byte[] data,
			DatagramPacket packet) {
		this.data = data;
		this.socket = socket;
		this.packet = packet;
	}
	@Override
	public void run() {
		try {
			System.out.println("Serve is waiting...3");
			String info = new String(data, 0, packet.getLength());
			System.out.println("Receive Client " + info);
			// 响应数据
			InetAddress address = packet.getAddress();
			int port = packet.getPort();
			byte[] dataReply = "welcome".getBytes();
			DatagramPacket packetReply = new DatagramPacket(dataReply,
					dataReply.length, address, port);
			socket.send(packetReply);
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
//			socket.close();
		}
		super.run();
	}
} 
				我的也是,是不是不该创建那么多datagrampacket或者是没有关闭的原因,while一开,内存使用率直逼99%。
Java Socket应用---通信是这样练成的
125006 学习 · 627 问题
相似问题