先說一下關於InetAddress類,用一個小例子:java
import java.net.InetAddress; import java.net.UnknownHostException; public class IPDemo { public static void main(String[] args) throws UnknownHostException { // InetAddress i = InetAddress.getLocalHost();獲取本地信息 // System.out.println(i); InetAddress i = InetAddress.getByName("www.baidu.com"); System.out.println(i.getHostAddress()); System.out.println(i.getHostName()); } }
UDP是一種面向無鏈接的傳輸方式,傳輸速度快,可是每次傳輸的大小不能超過64K編程
怎樣來編寫UDP?網絡
發送數據步驟:socket
1.建立socket服務.net
2.建立數據包對象
3.將數據封裝到數據包中,添加ip和端口以及數據blog
4.發送ip
5.關閉資源資源
接收數據步驟:get
1.建立socket服務,並監聽端口
2.建立數據包,用來接收數據
3.用socket接收數據到數據包中
4.從數據包中取出數據
5.關閉資源
下面用代碼演示:
import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; class UdpSend{ //1.建立socket服務 //2.傳輸數據,並打包 //3.發送 //4.關閉資源 public static void main(String[] args) throws Exception { //1.建立socket服務 DatagramSocket socket = new DatagramSocket(10000);//指定發送器端口 //2.傳輸數據,並打包 byte[] buf = "udp hello".getBytes(); DatagramPacket packet = new DatagramPacket(buf, buf.length, InetAddress.getByName("localhost"), 8888);//指定應用程序端口 //發送 socket.send(packet); //關閉資源 socket.close(); System.out.println("over"); } } /* * 1.建立服務socket,並監聽端口 * 2.定義一個數據包,用來接受數據包 * 3.用socket服務接受的數據保存到,數據包中 * 4.取出數據 * 5.關閉資源 */ class UdpRece{ public static void main(String[] args) throws Exception { DatagramSocket ds = new DatagramSocket(8888);//指定應用程序的端口 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); ds.receive(dp); String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String data = new String(dp.getData(),0,dp.getLength()); System.out.println(ip+":"+port+":"+data); ds.close(); } } public class UdpDemo { public static void main(String[] args) { } }
上面傳送一次數據,下面寫一個加強版的。
import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; class Send{ public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String line =null; while((line = reader.readLine())!=null){ if("886".equals(line)){ break; } byte[] buf = line.getBytes(); DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getByName("127.0.0.1"),8888); socket.send(dp); } reader.close(); socket.close(); } } class Rece{ @SuppressWarnings("resource") public static void main(String[] args) throws Exception { DatagramSocket socket = new DatagramSocket(8888); while(true){ byte[] buf = new byte[1024]; DatagramPacket dp =new DatagramPacket(buf, buf.length); socket.receive(dp); String data = new String(dp.getData(),0,dp.getLength()); String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); System.out.println(ip+":"+port+":"+data); } } } public class UdpDemo2 { public static void main(String[] args) { } }
總結:其實java中將網絡傳輸的部件,都封裝成對象,很是方便使用,在網絡編程中主要是記住步驟。