日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java基础--网络编程

發布時間:2024/2/28 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java基础--网络编程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

UDP協議和TCP協議

  • UDP協議和TCP協議都是傳輸層的協議,都是端到端協議
  • 區別:
  • ? UDP協議面向無連接,像發短信,寄信,先發送的消息未必先到達,不安全,效率高,只區分發送端和接收端,而不區分客戶端和服務端

    ? TCP協議面向連接,像打電話,先發送的消息一定是先到,安全,效率低,區分客戶端和服務端。在連接的時候,會有三次握手的動作。

    UDP:

    DatagramPacket類表示存放數據的數據包 DatagramSocket類表示一個數據報套接字,包含了源IP地址,和目的IP地址以及源端口號和目的端口號的組合,用于 發送和接受UDP數據。

    演示:

    TestSend

    package network;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException;public class TestSend {public static void main(String[] args) throws Exception {//創建DatagramSocket對象,指定端口號為8090DatagramSocket ds = new DatagramSocket(8090);//要發送的數據byte[] bs = "I am UDP!!!".getBytes();//指定接收端IP為127.0.0.1,端口號為8081DatagramPacket dp = new DatagramPacket(bs,0,bs.length, InetAddress.getByName("127.0.0.1"),8081);System.out.println("Sending data...");ds.send(dp);//發送數據ds.close();} }

    ?TestReceive:

    package network;import java.net.DatagramPacket; import java.net.DatagramSocket;/* DatagramPacket類表示存放數據的數據包 DatagramSocket類表示一個數據報套接字,包含了源IP地址,和目的IP地址以及源端口號和目的端口號的組合,用于 發送和接受UDP數據。*/ public class TestReceivce {public static void main(String[] args) throws Exception {//創建DatagramSocket對象,指定端口號8081 創建數據報套接字并將其綁定到本地主機上的指定端口。DatagramSocket ds = new DatagramSocket(8081);byte[] bs = new byte[1024];//創建接受數據的數組//創建DatagramPacket對象,用于接收數據DatagramPacket dp = new DatagramPacket(bs,bs.length);System.out.println("Waiting to receive data...");//receive(dp) 從此套接字接收數據報包 沒有數據會阻塞ds.receive(dp);//獲取接受數據的內容和長度String str = new String(dp.getData(),0,dp.getLength());//打印接收到的信息System.out.println(str + "-->" + dp.getAddress().getHostAddress() + ":" + dp.getPort());ds.close();} }

    TCP編程

  • 使用的通信點就是Socket類型
  • 客戶端和服務端獲取Socket對象的區別:
  • ? 1、客戶端使用Socket的構造方法,創建一個Socket對象

    ? 2、服務端不能使用自己創建的方式,而是使用服務端一個特殊的對象,接收客戶端發來的請求,生成一個為這個客戶端服務的Socket對象

    3、構造方法:

    ????Socket(String?host, int?port)

    ? Socket(InetAddress ip, int port):建立一個通信點,專門用于和ip主機的port程序進行通信。

    ? 只要這個對象創建成功了,就說明這個連接已經建立起來了,就說明當前的客戶端已經聯系上服務端了,已經獲取了服務端返回的響應。

    ? 在創建對象的過程,就是在請求和服務端連接的過程。

    4、服務端獲取Socket對象的方式:

    ? 1、啟動一個服務程序,類型是ServerSocket,可以接收客戶端發來的連接請求,一旦接收到請求,就可以創建一個和當前客戶端交互的Socket對象

    ? 2、ServerSocket的構造方法

    ? ? ServerSocket(int port):創建一個服務端Socket對象,等待訪問port端口的客戶端

    ? 3、accept():接收一個客戶端發來的請求,返回一個服務此客戶端的Socket對象

    5、獲取客戶端和服務端的連接

    ? 1、兩個方法:

    ? ? InputStream ?getInputStream():獲取Socket對象的網絡輸入流

    ? ? OutputStream ?getOutputStream():獲取Socket對象的網絡輸出流

    ? 2、一旦獲取了輸入輸出流,就可以通過I\O的方式,來操作網絡數據的傳輸。

    ? 3、對應關系:

    ? ? 客戶端的網絡輸入流,對應服務端的網絡輸出流

    ? ? 客戶端的網絡輸出流,對應服務端的網絡輸入流

    6、TCP編程步驟

    ? 客戶端:

    ? ? 1、創建Socket對象,建立和服務端的連接

    ? ? 2、獲取網絡輸入流和網絡輸出流

    ? ? 3、通過I\O的操作來進行數據傳輸

    ? 服務端:

    ? ? 1、創建ServerSocket對象,開啟服務器,監聽指定端口

    ? ? 2、調用accept方法,接收客戶端發來的請求,返回一個Socket對象

    ? ? 3、獲取服務端的網絡輸入流和網絡輸出流

    ? ? 4、通過I\O的操作來進行輸出傳輸

    TestServer: package network;import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket;public class TestServer {public static void main(String[] args) throws IOException {ServerSocket ss = new ServerSocket(9090);System.out.println("waiting accept data...");Socket s = ss.accept();//偵聽并接受到此套接字的連接。InputStream is = s.getInputStream();//返回此套接字的輸入流byte[] bs = new byte[20];int len;while ((len = is.read(bs)) != -1){String str = new String(bs,0,len);System.out.println(str);}OutputStream os = s.getOutputStream();//返回此套接字的輸出流os.write("server already accept data".getBytes());os.close();is.close();s.close();ss.close();} } TestSend: package network;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException;public class TestSend {public static void main(String[] args) throws Exception {//創建DatagramSocket對象,指定端口號為8090DatagramSocket ds = new DatagramSocket(8090);//要發送的數據byte[] bs = "I am UDP!!!".getBytes();//指定接收端IP為127.0.0.1,端口號為8081DatagramPacket dp = new DatagramPacket(bs,0,bs.length, InetAddress.getByName("127.0.0.1"),8081);System.out.println("Sending data...");ds.send(dp);//發送數據ds.close();} }

    ?

    總結

    以上是生活随笔為你收集整理的java基础--网络编程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。