UDP通訊長整型資料
阿新 • • 發佈:2019-02-17
難點:長整型轉位元組陣列,位元組陣列轉長整型
建立伺服器:
建立客戶端:import java.io.ByteArrayInputStream; import java.io.DataInputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; public class LongUDPServer { public static void main(String[] args) { // TODO Auto-generated method stub byte[] buf=new byte[1024]; DatagramPacket dp=null; DatagramSocket ds=null; dp=new DatagramPacket(buf,buf.length);//建立一個數據包裹,用位元組陣列buf來接收資料 try { ds=new DatagramSocket(6666); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } while(true){ try { ds.receive(dp); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } ByteArrayInputStream bais = new ByteArrayInputStream(buf); //建立一個 ByteArrayInputStream,使用 buf 作為其緩衝區陣列。 DataInputStream dis = new DataInputStream(bais); //使用指定的底層輸出流dis建立一個 DataInputStream。 try { System.out.println(dis.readLong());//讀取此輸入流的下八個位元組,將它們解釋為一個 long } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
import java.io.ByteArrayOutputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetSocketAddress; import java.net.SocketException; public class LongUDPClient { public static void main(String[] args) { // TODO Auto-generated method stub long n=1000L; ByteArrayOutputStream baos=new ByteArrayOutputStream();//建立一個新的 byte 陣列輸出流。 DataOutputStream dos=new DataOutputStream(baos);//建立一個新的資料輸出流,將資料寫入指定基礎輸出流即baos位元組輸出流。 try { dos.writeLong(n);//將一個 long 值即n以 8-byte 值形式寫入基礎輸出流中,先寫入高位元組。 } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } byte[] buf=baos.toByteArray();//建立一個新分配的 byte 陣列。其大小是此輸出流的當前大小,並且緩衝區的有效內容已複製到該陣列中。 DatagramPacket dp=null; try { dp=new DatagramPacket(buf,buf.length,new InetSocketAddress("127.0.0.1",6666)); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } DatagramSocket ds=null; try { ds=new DatagramSocket(8888); } catch (SocketException e) { // TODO Auto-generated catch block e.printStackTrace(); } try { ds.send(dp); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } ds.close(); } }