1. 程式人生 > 程式設計 >淺談Java中的網路程式設計

淺談Java中的網路程式設計

淺談java中的網路程式設計

1.基礎

網路程式設計是指編寫執行在多個裝置(計算機)的程式,這些裝置都通過網路連線起來.

在java中提供了java.net包,其中包含類和介面.它們提供低層次的通訊細節.我們可以直接使用這些類和介面,專門解決問題.

網際網路的三大基石: url html http

java.net包中提供了兩種常見的網路協議的支援:

UDP: 使用者資料報協議的縮寫.非面向連線,不安全,協議簡單,開銷小,效率高,大小有限制,一般不超過60k

TCP:面向連線,安全,效率低 . 基於3次握手: 1.撥號 2.響應,連線上 3.傳送資料

2.UDP

1.UDP實現基本流程: 傳送端

使用DatagramSocket指定埠,建立傳送端

準備資料 一定要轉成位元組陣列

封裝成DatagramPacket包裹

傳送包裹send(DatagramPacket p)

釋放資源

傳送端示例1:


        import java.net.DatagramPacket;
        import java.net.DatagramSocket;
        import java.net.InetSocketAddress;
        public class UDPSend1 {
        	public static void main(String[] args)
throws Exception
{ System.out.println("傳送方啟動中..."); // 1.使用DatagramSocket指定埠,建立傳送端 DatagramSocket client = new DatagramSocket(6666); // 2.準備資料 一定要轉成位元組陣列 String data = "落霞與孤鶩齊飛,秋水共長天一色"; byte[] datas = data.getBytes(); // 3.封裝成DatagramPacket包裹
DatagramPacket packet = new DatagramPacket(datas,0,datas.length,new InetSocketAddress("localhost",8888)); // 4.傳送包裹send(DatagramPacket p) client.send(packet); // 5.釋放資源 client.close(); } } 複製程式碼

2.UDP實現基本流程: 接收端

使用DatagramSocket指定埠,建立接收端

準備容器,封裝成DatagramPacket包裹

阻塞式接收包裹receive(DatagramPacket p)

分析資料

釋放資源

接收端示例1:

        import java.net.DatagramPacket;
        import java.net.DatagramSocket;
        public class UDPReceive1 {
    	public static void main(String[] args) throws Exception {
    		System.out.println("接收端準備中.... ");
    		// 1.使用DatagramSocket指定埠,建立接收端
    		DatagramSocket server = new DatagramSocket(8888);
    		// 2.準備容器,封裝成DatagramPacket包裹
    		byte[] container = new byte[1024 * 60];
    		DatagramPacket packet = new DatagramPacket(container,container.length);
    		// 3.阻塞式接收包裹receive(DatagramPacket p)
    		server.receive(packet);
    		// 4.分析資料
    		byte[] datas = packet.getData();
    		int len = packet.getLength();
    		System.out.println(new String(datas,len));
    		// 5.釋放資源
    		server.close();
    	}
    }
複製程式碼

3.TCP

1.TCP實現基本流程:客戶端

定義客戶端 Socket Socket(String host,int port) 建立一個流套接字連線到指定主機上的指定埠號

準備資料

寫出 IO操作

釋放資源

客戶端示例2:


        import java.io.DataOutputStream;
        import java.io.IOException;
        import java.net.Socket;
        import java.net.UnknownHostException;
        public class Client01 {
    	public static void main(String[] args) throws UnknownHostException,IOException {
    		System.out.println("-------------Client-----------");
    		//1.定義客戶端 Socket  Socket(String host,int port)
    		Socket client=new Socket("127.0.0.1",7777);
    		//2.準備資料
    		String str="name=zhangsan&pwd=123";
    		//3.寫出  直接從管道中獲取流
    		DataOutputStream data=new DataOutputStream(client.getOutputStream());
    		data.writeUTF(str);
    		data.flush();
    		//4.關閉
    		data.close();
    		client.close();
    	}
    }
複製程式碼

2.TCP實現基本流程:服務端

定義服務端 ServerSocket ServerSocket(int port) 建立一個伺服器套接字繫結到指定埠

阻塞式監聽 Socket accept()

監聽連線套接字並接受它

io操作

釋放資源

服務端示例2:

    import java.io.DataInputStream;
    import java.io.IOException;
    import java.net.ServerSocket;
    import java.net.Socket;
    public class Server01 {
    	public static void main(String[] args) throws IOException {
    		System.out.println("-------------Server-----------");
    		//1.定義服務端
    		ServerSocket server=new ServerSocket(7777);
    		//2.阻塞式監聽  Socket accept() 
    		Socket client=server.accept();
    		//3.io操作,直接從管道中獲得流
    		DataInputStream in=new DataInputStream( client.getInputStream());
    		String str=in.readUTF();
    		System.out.println(str);
    		//4.釋放資源
    		in.close();
    		client.close();
    		server.close();
    	}
    }	
複製程式碼