課程
/后端開發
/Java
/Java Socket應用---通信是這樣練成的
想要實現多線程的話,服務器應該需要循環偵聽等待客戶端的連接吧?可是UDP的數據報如何像TCP的輸入流那樣,擁有一個終止的判斷條件(while(...) != null)呢?如果沒有終止條件,循環偵聽就真正陷入死循環了……
2015-09-06
源自:Java Socket應用---通信是這樣練成的 5-1
正在回答
比較蛋疼,估計是引用對象太多了,而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(); } }
慕粉20105833
我的也是,是不是不該創建那么多datagrampacket或者是沒有關閉的原因,while一開,內存使用率直逼99%。
五竹 提問者
舉報
分享的是 Java 中的網絡編程,使用Socket實現網絡聊天通信
1 回答UDP多線程
2 回答UDP實現多線程
2 回答UDP為什么要用多線程
5 回答求指教:UDP線程接收多客戶端數據
1 回答UDP實現多線程,是不是無法socket.close()?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-07-11
比較蛋疼,估計是引用對象太多了,而tcp中客戶端未連接他就不建立線程,但是UDP一直引用對象建立線程,導致CPU飆升
2016-03-19
可以在while循環語句里添加 ? break; 語句塊
2015-10-16
2015-09-13
我的也是,是不是不該創建那么多datagrampacket或者是沒有關閉的原因,while一開,內存使用率直逼99%。