一、網絡編程中的重要的類
1、InetAddress:互聯網協議(IP)地址 封裝計算機的IP地址和DNS(域名解析),沒有端口,構造器私有化。通過相關方法得到。
例如:
public class InetDemo01 {
public static void main(String[] args) {
try {
InetAddress inetAddress=InetAddress.getByName("www.baidu.com");
//返回IP地址 127.0.0.1
System.out.println(inetAddress.getHostAddress());
//返回 localhost
System.out.println(inetAddress.getHostName());
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.URL類 :統一資源定位符
public class InetDemo02 {
public static void main(String[] args) {
try {
URL url = new URL("http://www.baidu.com:80/index.html#aa?uname=yym");
System.out.println(url.toString());
System.out.println("協議:"+url.getProtocol());
System.out.println("域名:"+url.getHost());
System.out.println("端口:"+url.getPort());
System.out.println("資源:"+url.getFile());
System.out.println("相對路徑:"+url.getPath());
System.out.println("錨點:"+url.getRef());
//有錨點時參數為空
System.out.println("參數:"+url.getQuery());
url = new URL("http://www.baidu.com/a/");
url = new URL(url,"b.txt");
System.out.println(url.toString());
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
}
3、TCP協議:像電話 ,必須先建立連接,安全可靠,但是效率低;
UDP協議:像短信,不用先建立連接 ,不安全,效率高;
UDP:類DatagramSocket DatagramPacket
步驟:客戶端: 服務器端:
1)創建客戶端DatagramSocket 類 + 端口(客戶端端口) 1)創建服務器端DatagramSocket類+端口(服務器端端口)
2)准備數據 字節數組 2)准備接收容器 字節數組
3)打包數據DatagramPacket + 並指定服務器地址及端口 3)封裝DatagramPacket
4)客戶端發送打包數據 4)服務器端接收數據
5)釋放資源 5)拆包 + 分析數據
6)釋放資源
客戶端:
public class MyClient {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(6666); //創建客戶端DatagramSocket 類 + 端口(客戶端端口)
String msg = "這是要發的數據";
byte[] data = msg.getBytes(); //把要發的數據封裝成字節數組
DatagramPacket packet = new DatagramPacket(data, data.length, new InetSocketAddress("localhost", 8888));//將數據打包,並指定服務器地址及端口
datagramSocket.send(packet); //客戶端發送打包數據
datagramSocket.close(); //釋放資源
}
}
服務器端:
public class MyServler {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket(8888); //創建服務器端DatagramSocket類+端口(服務器端端口)
byte[] container =new byte[1024]; //准備接收容器 字節數組 (保證一致性,發送的數據是用DatagramPacket封裝的字節數組)
DatagramPacket datagramPacket = new DatagramPacket(container, container.length); //
datagramSocket.receive(datagramPacket); //服務器端接收數據
byte[] data =datagramPacket.getData(); //拆包
int len = datagramPacket.getLength(); //分析數據
System.out.println(new String(data,0,len));
datagramSocket.close(); //釋放資源
}
}
TCP協議: ServerSocket Socket 客戶端和服務器端必須先建立連接 再發送或者接收數據(使用流) 必須先啟動服務器端,再啟動客戶端。
客戶端:Socket socket = new Socket("localhost",8888); //創建客戶端,並指定服務器端口
服務器端:
ServerSocket server = new ServerSocket(8888);//創建服務器端,並指定端口
Socket socket = server.accept(); //一旦連接此服務器的客戶端啟動,服務器端就會接收到
接收數據:Socket中的getInputStream();返回InputStream
發送數據:Socket中的getOutputStream();返回OutputStream