網絡編程是指編寫運行在多個設備(計算機)的程序,這些設備都經過網絡鏈接起來.html
在java中提供了java.net包,其中包含類和接口.它們提供低層次的通訊細節.咱們能夠直接使用這些類和接口,專門解決問題.java
互聯網的三大基石: url html http編程
java.net包中提供了兩種常見的網絡協議的支持:數組
UDP: 用戶數據報協議的縮寫.非面向鏈接 , 不安全, 協議簡單,開銷小,效率高, 大小有限制,通常不超過60k安全
TCP:面向鏈接, 安全,效率低 . 基於3次握手: 1.撥號 2.響應,鏈接上 3.發送數據服務器
使用DatagramSocket指定端口,建立發送端網絡
準備數據 必定要轉成字節數組url
封裝成DatagramPacket包裹spa
發送包裹send(DatagramPacket p).net
釋放資源
發送端示例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();
}
}
複製代碼
使用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, 0, container.length);
// 3.阻塞式接收包裹receive(DatagramPacket p)
server.receive(packet);
// 4.分析數據
byte[] datas = packet.getData();
int len = packet.getLength();
System.out.println(new String(datas, 0, len));
// 5.釋放資源
server.close();
}
}
複製代碼
定義客戶端 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();
}
}
複製代碼
定義服務端 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();
}
}
複製代碼