一、網路編程中的重要的類 1、InetAddress:互聯網協議(IP)地址 封裝電腦的IP地址和DNS(功能變數名稱解析),沒有埠,構造器私有化。通過相關方法得到。 例如: public class InetDemo01 { public static void main(String[] args)
一、網路編程中的重要的類
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