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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java基础 - 网络编程 - netstat指令,UDP通信编程和网络编程总练习

發布時間:2024/8/1 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java基础 - 网络编程 - netstat指令,UDP通信编程和网络编程总练习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • netstat 指令
    • 案例表示
  • TCP網絡通訊不為人知的秘密
  • UDP網絡通信編程[了解]
    • 基本介紹
    • 基本流程
    • 應用案例
  • 網絡編程練習(課堂作業鞏固)
    • TCP交互傳輸字節流回復
    • UDP交互傳輸字節流回復
    • TCP交互傳輸音樂文件

netstat 指令

  • netstat - an 可以查看當前主機網絡情況,包括端口監聽情況和網絡連接情況
  • netstat - an | more 可以分頁顯示,光標顯示后點回車下一頁
  • ctrl + c 退出指令
  • 案例表示

    TCP網絡通訊不為人知的秘密

  • 當客戶端連接到服務端后,實際上客戶端也是通過一個端口和服務端進行通訊的,這個端口是TCP/IP來分配的
  • UDP網絡通信編程[了解]

    基本介紹

  • 類DatagramSocket 和 DatagramPacket 實現了基于UDP協議網絡程序。
  • UDP數據報通過數據報套接字 DatagramSocket 發送和接收,系統不保證UDP數據報一定能夠安全送到目的地,也不能確定什么時候可以抵達
  • DatagramPacket 對象封裝了UDP數據報,在數據中包含了發送端的IP地址和端口號以及接收端的IP地址和端口號
  • UDP協議中每個數據報都給出了完整的地址信息,因此無需建立發送方和接收方的連接
  • 基本流程

  • 核心的兩個類/對象 DatagramSocket與DatagramPacket
  • 建立發送端,接收端(沒有服務端和客戶端概念)
  • 發送數據前,建立數據包/報 (DatagramPack對象)
  • 調用DatagramSocket的發送,接收方法
  • 關閉DatagramSocket
  • 應用案例

  • 編寫一個接收端A,和一個發送端B
  • 接收端A在9999端口等待接受數據(receive)
  • 發送端B向接收端A 發送數據“hello,明天吃火鍋~”
  • 接收端A接收到 發送端B發送的數據,回復“好的,明天見”,再退出
  • 發送端接收 回復的數據,再退出
  • 接收端

    package com.tao.udp;import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;/*** Create By 劉鴻濤* 2022/2/8 9:55* UDP接收端*/ public class UDPReceiverA {public static void main(String[] args) throws IOException {//1.創建一個 DatagramSocket 對象 準備在9999接收數據DatagramSocket datagramSocket = new DatagramSocket(9999);//2.構建一個DatagramPacket對象,準備接收數據// 在前面學習UDP協議時,知道一個UDP數據包最大64kbyte[] buf = new byte[1024];DatagramPacket packet = new DatagramPacket(buf, buf.length);//3.調用接收方法receive(),將通過網絡傳輸的 DatagramPacket對象//提示:當有數據包發送到 本機的9999端口時,就會阻塞等待System.out.println("接收端A,9999端口, 等待接收數據....");datagramSocket.receive(packet);System.out.println("1");//4.可以把packet 進行拆包,取出數據,并顯示int length = packet.getLength(); //實際接收到的數據字節長度byte[] data = packet.getData(); //接收到數據String s = new String(data, 0, length);System.out.println(s);data = "好的,明天見".getBytes();//說明:封裝的 DatagramPacket 對象 data 內容字節數組,data.length,主機(IP),端口 // InetAddress.getLocalHost() //獲得主機ipDatagramPacket datagramPacket = new DatagramPacket(data, data.length,InetAddress.getLocalHost(), 9998);//這里的127.0.0.1指發送給本機datagramSocket.send(datagramPacket);//關閉流datagramSocket.close();System.out.println("===接收端已終止===");} }

    發送端

    package com.tao.udp;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;/*** Create By 劉鴻濤* 2022/2/8 9:57* 發送端B ====> 也可以接收數據*/ public class UDPSenderB {public static void main(String[] args)throws Exception {//創建 DatagramSocket對象,準備接收數據////因為是在本機舉例接收端和發送端,所以這個端口號最好不要相同,因為會分不清誰是接收方,// 誰是發送方,導致程序錯亂,當然,如果是兩臺主機,那么就可以使用相同端口號,就比如// 是兩個樓層中兩個相同id的門一樣,雖然id相同,但并不是一個門DatagramSocket datagramSocket = new DatagramSocket(9998);//2.將需要發送的數據,封裝到 DatagramPacket對象byte[] data = "hello 明天吃火鍋".getBytes();//說明:封裝的 DatagramPacket 對象 data 內容字節數組,data.length,主機(IP),端口 // InetAddress.getLocalHost() //獲得主機ipDatagramPacket datagramPacket = new DatagramPacket(data, data.length,InetAddress.getLocalHost(), 9999);//這里的127.0.0.1指發送給本機datagramSocket.send(datagramPacket);byte[] buf = new byte[1024];datagramPacket = new DatagramPacket(buf, buf.length);datagramSocket.receive(datagramPacket);int length = datagramPacket.getLength(); //實際接收到的數據字節長度byte[] data2 = datagramPacket.getData(); //接收到數據String s = new String(data2, 0, length);System.out.println(s);//關閉資源datagramSocket.close();System.out.println("===發送端已終止===");} }

    網絡編程練習(課堂作業鞏固)

    TCP交互傳輸字節流回復

  • 使用字節流的方式,編寫一個客戶端程序和服務端程序
  • 客戶端發送“name”,服務器端接收到后,返回,“我是nova”,nova是你自己的名字
  • 客戶端發送“hobby”,服務器端接收到后,返回“編寫java程序”
  • 不是這樣兩個問題,回復“你說啥呢”
  • package com.tao.homework.homework01;import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket;/*** Create By 劉鴻濤* 2022/2/8 20:44*/ public class Server {public static void main(String[] args) throws IOException {while(true) {ServerSocket serverSocket = new ServerSocket(5000);//監聽System.out.println("等待客戶端連接連接");Socket socket = serverSocket.accept();System.out.println("正在接收數據...");InputStream inputStream = socket.getInputStream(); //接收數據通道的數據//IO讀取byte[] buf = new byte[1024];int len = 0;String s = "";while ((len = inputStream.read(buf)) != -1) {s = new String(buf, 0, len);if (s.equals("name")) {s = "我是濤濤";} else if (s.equals("hobby")) {s = "編寫java程序";} else {s = "你說啥";}}OutputStream outputStream = socket.getOutputStream();outputStream.write(s.getBytes()); //寫入s到數據通道socket.shutdownOutput(); //結束語句,我說完了System.out.println("正在傳輸數據到數據通道...");//關閉流socket.close();inputStream.close();serverSocket.close();System.out.println("服務器端結束");}} } package com.tao.homework.homework01;import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; import java.util.Scanner;/*** Create By 劉鴻濤* 2022/2/8 20:48*/ public class Client {public static void main(String[] args) throws IOException, InterruptedException {while(true) {Socket socket = new Socket(InetAddress.getLocalHost(), 5000);System.out.println("請輸入問題");Scanner sc = new Scanner(System.in);String s = sc.next();OutputStream outputStream = socket.getOutputStream();outputStream.write(s.getBytes());socket.shutdownOutput(); //結束語句,證明我說完了InputStream inputStream = socket.getInputStream();byte[] buf = new byte[1024];int len = 0;while ((len = inputStream.read(buf)) != -1) {System.out.println(new String(buf, 0, len));}//關閉流socket.close();outputStream.close();System.out.println("客戶端結束");}} }

    UDP交互傳輸字節流回復

  • 編寫一個接收端A,和一個發送端B,使用UDP協議完成
  • 接收端在8888端口等待接收數據(receive)
  • 發送端向接收端發送數據“四大名著是哪些”
  • 接收端接收到發送端發送的問題后,返回“四大名著是<<紅樓夢>>…",否則返回what?
  • 接收端和發送端程序退出
  • package com.tao.homework.homework02;import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress;/*** Create By 劉鴻濤* 2022/2/8 9:55* UDP接收端*/ public class Homework02ReceiverA {public static void main(String[] args) throws IOException {//1.創建一個 DatagramSocket 對象 準備在9999接收數據DatagramSocket datagramSocket = new DatagramSocket(9999);//2.構建一個DatagramPacket對象,準備接收數據// 在前面學習UDP協議時,知道一個UDP數據包最大64kbyte[] buf = new byte[1024];DatagramPacket packet = new DatagramPacket(buf, buf.length);//3.調用接收方法receive(),將通過網絡傳輸的 DatagramPacket對象//提示:當有數據包發送到 本機的9999端口時,就會阻塞等待System.out.println("接收端A,9999端口, 等待接收數據....");datagramSocket.receive(packet);//4.可以把packet 進行拆包,取出數據,并顯示int length = packet.getLength(); //實際接收到的數據字節長度byte[] data = packet.getData(); //接收到數據String s = new String(data, 0, length);String answer = "";if ("四大名著有哪些".equals(s) ){answer = "四大名著 《紅樓夢》《三國演義》《西游記》《水滸傳》";}else {answer = "你說啥?";} // System.out.println(s);data = answer.getBytes();//說明:封裝的 DatagramPacket 對象 data 內容字節數組,data.length,主機(IP),端口 // InetAddress.getLocalHost() //獲得主機ipDatagramPacket datagramPacket = new DatagramPacket(data, data.length,InetAddress.getLocalHost(), 9998);//這里的127.0.0.1指發送給本機datagramSocket.send(datagramPacket);//關閉流datagramSocket.close();System.out.println("===接收端已終止===");} } package com.tao.homework.homework02;import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.util.Scanner;/*** Create By 劉鴻濤* 2022/2/8 9:57* 發送端B ====> 也可以接收數據*/ public class Homework02SenderB {public static void main(String[] args)throws Exception {//創建 DatagramSocket對象,準備接收數據////因為是在本機舉例接收端和發送端,所以這個端口號最好不要相同,因為會分不清誰是接收方,// 誰是發送方,導致程序錯亂,當然,如果是兩臺主機,那么就可以使用相同端口號,就比如// 是兩個樓層中兩個相同id的門一樣,雖然id相同,但并不是一個門DatagramSocket datagramSocket = new DatagramSocket(9998);//2.將需要發送的數據,封裝到 DatagramPacket對象//把字符a包裝送到數據通道System.out.println("請輸入查詢內容...");Scanner scanner = new Scanner(System.in);String a = scanner.next();byte[] data = a.getBytes();//說明:封裝的 DatagramPacket 對象 data 內容字節數組,data.length,主機(IP),端口 // InetAddress.getLocalHost() //獲得主機ipDatagramPacket datagramPacket = new DatagramPacket(data, data.length,InetAddress.getLocalHost(), 9999);//這里的127.0.0.1指發送給本機datagramSocket.send(datagramPacket);//接收數據通道傳來內容byte[] buf = new byte[1024];datagramPacket = new DatagramPacket(buf, buf.length);datagramSocket.receive(datagramPacket);int length = datagramPacket.getLength(); //實際接收到的數據字節長度byte[] data2 = datagramPacket.getData(); //接收到數據String s = new String(data2, 0, length);System.out.println(s);//關閉資源datagramSocket.close();System.out.println("===發送端已終止===");} }

    TCP交互傳輸音樂文件

  • 編寫客戶端程序和服務器端程序
  • 客戶端可以輸入一個音樂文件名,比如高山流水,服務端收到音樂名后,可以給客戶端返回這個音樂文件,如果服務器沒有這個文件,返回一個默認的音樂即可.
  • 客戶端收到文件后,保存到本地d:\
  • 該程序可以使用 StreamUtils.java
  • package com.tao.homework.homework03;import com.tao.upload.StreamUtils;import java.io.*; import java.net.InetAddress; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner;/*** Create By 劉鴻濤* 2022/2/9 12:21*/ public class Homework03Client {public static void main(String[] args) throws Exception {//找到服務器端口Socket socket = new Socket(InetAddress.getLocalHost(), 9999);OutputStream outputStream = socket.getOutputStream();System.out.println("請輸入需要下載的音樂...");Scanner scanner = new Scanner(System.in);String downLoadFileName = scanner.next();outputStream.write(downLoadFileName.getBytes());socket.shutdownOutput();//接受數據BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());byte[] bytes = StreamUtils.streamtoByteArray(bis);//得到一個輸出流,準備將bytes寫入到磁盤文件String filePath = "d:\\" + downLoadFileName + ".mp3";BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));bos.write(bytes);//關閉流outputStream.close();socket.close();scanner.close();bis.close();bos.close();System.out.println("客戶端關閉");} } package com.tao.homework.homework03;import com.tao.homework.homework01.Server; import com.tao.upload.StreamUtils;import java.io.*; import java.net.ServerSocket; import java.net.Socket;/*** Create By 劉鴻濤* 2022/2/9 12:20*/ public class Homework03Server {public static void main(String[] args) throws Exception {//1.監聽 9999端口,等待客戶端連接,并發送下載文件的名字ServerSocket serverSocket = new ServerSocket(9999);//2.等待客戶端連接Socket socket = serverSocket.accept();//3.讀取 客戶端發送要下載的文件名//這里老師使用了while讀取文件名,是考慮將來客戶端發送的數據較大的情況InputStream inputStream = socket.getInputStream();byte[] b = new byte[1024];int len = 0;String downLoadFileName = "";while ((len = inputStream.read(b)) != -1){downLoadFileName = new String (b,0,len);}System.out.println("客戶端希望下載文件名" + downLoadFileName);//src下有兩個文件,一個是“青山”,一個“高山流水.MP3”//如果客戶下載的是 “高山流水” 我們就返回該文件,否則默認返回“青山”String resFileName = "";//4.創建一個輸入流,讀取文件if ("高山流水".equals(downLoadFileName)){resFileName = "src\\高山流水.mp3";} else {resFileName = "src\\青山.mp3";}BufferedInputStream bis = new BufferedInputStream(new FileInputStream(resFileName));//5.實用工具類StreamUtils,讀取文件到一個字節數組byte[] bytes = StreamUtils.streamtoByteArray(bis);//6.得到Socket關聯的輸出流BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());//7.寫入到數據通道,返回給客戶端bos.write(bytes);socket.shutdownOutput();//8.關閉流serverSocket.close();socket.close();inputStream.close();bis.close();bos.close();System.out.println("服務端退出");} }

    總結

    以上是生活随笔為你收集整理的Java基础 - 网络编程 - netstat指令,UDP通信编程和网络编程总练习的全部內容,希望文章能夠幫你解決所遇到的問題。

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