Java UDP通信簡單實現(xiàn)
創(chuàng)新互聯(lián)是一家專注于網站設計、做網站與策劃設計,碭山網站建設哪家好?創(chuàng)新互聯(lián)做網站,專注于網站建設10多年,網設計領域的專業(yè)建站公司;建站業(yè)務涵蓋:碭山等地區(qū)。碭山做網站價格咨詢:18982081108
1、Java實現(xiàn)方式
1)server端
/**
*?UDPserver端
*?*/
public?class?UdpServer?{
//?定義一些常量
private?final?intMAX_LENGTH?=?1024;?//?最大接收字節(jié)長度
private?final?intPORT_NUM???=?5066;???//?port號
//?用以存放接收數據的字節(jié)數組
private?byte[]?receMsgs?=?new?byte[MAX_LENGTH];
//?數據報套接字
private?DatagramSocket?datagramSocket;
//?用以接收數據報
private?DatagramPacket?datagramPacket;
public?UdpServer(){
try?{
/*******?接收數據流程**/
//?創(chuàng)建一個數據報套接字,并將其綁定到指定port上
datagramSocket?=?new?DatagramSocket(PORT_NUM);
//?DatagramPacket(byte?buf[],?int?length),建立一個字節(jié)數組來接收UDP包
datagramPacket?=?new?DatagramPacket(receMsgs,?receMsgs.length);
//?receive()來等待接收UDP數據報
datagramSocket.receive(datagramPacket);
/******?解析數據報****/
String?receStr?=?new?String(datagramPacket.getData(),?0?,?datagramPacket.getLength());
System.out.println("Server?Rece:"?+?receStr);
System.out.println("Server?Port:"?+?datagramPacket.getPort());
/*****?返回ACK消息數據報*/
//?組裝數據報
byte[]?buf?=?"I?悔困掘receive?the?message".getBytes();
DatagramPacket?sendPacket?=?new?DatagramPacket(buf,?buf.length,?datagramPacket.getAddress(),?datagramPacket.getPort());
//?發(fā)碧核送消息
datagramSocket.send(sendPacket);
}?catch?(SocketException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}?finally?{
//?關閉socket
if?(datagramSocket?!=?null)?{
datagramSocket.close();
}
}
}
}
2)client
/***
*?UDPclientClient端
***/
public?class?UdpClient?{
private?String?sendStr?=?"SendString";
private?String?netAddress?=?"127.0.0.1";
private?final?intPORT_NUM?=?5066;
private?DatagramSocket?datagramSocket;
private?DatagramPacket?datagramPacket;
public?UdpClient(){
try?{
/***?發(fā)送數據***/
//?初始化datagramSocket,注意與前面Server端實現(xiàn)的差別
datagramSocket?=?new?DatagramSocket();
//?使用DatagramPacket(byte?buf[],?int?length,?InetAddress?address,?int?port)函數組裝發(fā)送UDP數據報
byte[]?buf?=?sendStr.getBytes();
InetAddress?address?=?InetAddress.getByName(netAddress);
datagramPacket?=?new?DatagramPacket(buf,?buf.length,?address,?PORT_NUM);
//?發(fā)送數據
datagramSocket.send(datagramPacket);
/***?接收數據***/
尺肢???????????byte[]?receBuf?=?new?byte[1024];
DatagramPacket?recePacket?=?new?DatagramPacket(receBuf,?receBuf.length);
datagramSocket.receive(recePacket);
String?receStr?=?new?String(recePacket.getData(),?0?,?recePacket.getLength());
System.out.println("Client?Rece?Ack:"?+?receStr);
System.out.println(recePacket.getPort());
}?catch?(SocketException?e)?{
e.printStackTrace();
}?catch?(UnknownHostException?e)?{
e.printStackTrace();
}?catch?(IOException?e)?{
e.printStackTrace();
}?finally?{
//?關閉socket
if(datagramSocket?!=?null){
datagramSocket.close();
}
}
}??
}
需要。
在系統(tǒng)和業(yè)務級別上加入一些日志代碼,記錄一些日志信息,方便我們在發(fā)現(xiàn)告襲問題的時候查找。
把驗證過后的字節(jié)碼發(fā)送到“Java解釋器”和“及空升時編譯器”交給“Java運行系統(tǒng)”運行。
Java探針,字節(jié)斗友老碼增強的方式就是利用Java代理,這個代理是運行方法之前的攔截器。
在JVM加載Class二進制文件的時候,利用ASM動態(tài)的修改加載的Class文件,在監(jiān)控的方法前后添加需要監(jiān)控的內容。
在Java應用中,可以使用動態(tài)探針來收集運行時的統(tǒng)計數據,以此來幫助優(yōu)化性能。想要實現(xiàn)動含孫態(tài)探針的加載和關閉可以通過命令行參數來實現(xiàn)櫻喚。具體地,可以使用-javaagent選項和指定的動態(tài)探針jar包路徑來加載探針,在程序結束時,調用鉤子方法關閉探針。在代碼中,可以使用Runtime類的addShutdownHook方法注冊一個優(yōu)雅停機的鉤子,這里可以先定義一個實現(xiàn)了Runnable接口的對象,當JVM需要或必須談頌鏈退出時將自動調用它的run()方法。在run方法中,釋放相關資源和關閉動態(tài)探針,以確保應用正常退出。