23、java中的网编基础
什么是網絡編程?
?????? 在說網絡編程之前要先知道什么是網絡,網絡是一種實現資源共享和數據傳輸的系統。而網絡編程就是使用代碼編寫程序來進行網絡之間數據的傳輸。使用java進行網絡之間數據的傳輸是比較簡單的,java中提供了一些現成的類供我們使用,其實這一塊也沒什么好理解的,記住就可以了,這里只是簡單介紹一下網絡之間進行數據傳輸的方式和如何使用java中提供類進行編程。
如何進行數據的傳輸?
?????? 假如有兩臺機器服務器A和客戶端B需要進行數據傳輸,首先,想到的問題應該是如何確定這兩臺機器。在網絡中每一個機器都使用一個ip地址作為自己的唯一標識,所以首先應該確認機器的ip地址,接著,客戶端B將信息發送到了服務器A,這是服務器中的哪個應用去接收處理客戶端發來的信息呢?每一臺機器中有65535個端口, 每一個端口對應著一個應用程序,所以還要指定端口(port)來告訴服務器將信息發送到哪個應用中進行處理。
? ? ?? 這里可能有一個疑問,數據是如何由客戶端發送到服務器的呢?
?????? 數據在傳輸時需要遵循特定的協議,這里有兩個協議可供選擇: TCP協議提供面向連接的服務,使用字節流的方式進行傳輸,是有序、可靠傳輸。 UDP協議提供無連接的服務,使用數據包的方式進行傳輸,是不可靠的傳輸。
?java如何實現數據傳輸?
?????? 接下來介紹一下java中的網編實現方式,在java中使用socket套接字來邏輯表示網絡中的結點(客戶端B和服務器A),套接字的兩個基本屬性就是ip和端口。數據進行傳輸時先通過套接字來連接兩個結點,然后使用套接字中提供的數據流來進行數據的傳輸,等到傳輸結束后,則注銷兩個套接字,結束結點之間的通信。
?????? 針對不同協議的數據傳輸,java中提供了不同的實現方式,使用TCP協議進行java進行網絡編程時,由于需要先創建連接,所以必須先開發服務器端,當服務器端沒有開啟時,客戶端訪問會報錯,看一下根據TCP協議進行數據傳輸的例子,代碼如下:
? ? ??
?????? 上邊這是一個服務器對應要給客戶端,當多個客戶端訪問一臺服務器時,使用多線程即可,每來一個客戶端就創建一個新線程,創建一個新的套接字。
??????? 當使用UDP協議進行java開發時,服務器端不需要一定開啟,客戶端發送信息,不會管服務器是否接受成功了,看一下使用UDP協議進行數據傳輸的例子,代碼如下:
/*** 服務器端 */ public class Recive {public static void main(String[] args) {// 1.創建數據報包套接字DatagramSocket socket = null;// 2.創建數據包DatagramPacket dpGet = null;DatagramPacket dpSend = null;try {// 3.構造一個數據包byte[] b = new byte[2048];dpGet = new DatagramPacket(b, b.length);// 4.構造套接字,并開啟服務器,等待接受數據包socket = new DatagramSocket(9002);socket.receive(dpGet);//服務器阻塞,等待訪問System.out.println("接受到客戶端的信息:"+new String(b));// 5.從包中獲取到客戶端的套接字地址信息,并返回客戶端信息SocketAddress socketAddress = dpGet.getSocketAddress();byte[] sendData = "這是服務器返回的信息".getBytes();dpSend = new DatagramPacket(sendData, sendData.length, socketAddress);socket.send(dpSend);} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {socket.close();}} }-----------------------------------------------------/*** 客戶端 */ public class Send {public static void main(String[] args) {// 1.聲明數據報包套接字DatagramSocket socket = null;// 2.聲明數據庫報包DatagramPacket dp = null;try {// 4.構建套接字socket = new DatagramSocket();// 5.構建發送包byte[] bytes = "客戶端發送的信息".getBytes();dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName("localhost"), 9002);// 6.發送數據報包socket.send(dp);} catch (UnknownHostException e) {e.printStackTrace();} catch (SocketException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {// 釋放資源socket.close();}} }?
總結
以上是生活随笔為你收集整理的23、java中的网编基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 22、java中的注解
- 下一篇: 30、JAVA_WEB开发基础之serv