文章目錄
- 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;
public class UDPReceiverA {public static void main(String[] args
) throws IOException {DatagramSocket datagramSocket
= new DatagramSocket(9999);byte[] buf
= new byte[1024];DatagramPacket packet
= new DatagramPacket(buf
, buf
.length
);System.out
.println("接收端A,9999端口, 等待接收數據....");datagramSocket
.receive(packet
);System.out
.println("1");int length
= packet
.getLength(); byte[] data
= packet
.getData(); String s
= new String(data
, 0, length
);System.out
.println(s
);data
= "好的,明天見".getBytes();
DatagramPacket datagramPacket
= new DatagramPacket(data
, data
.length
,InetAddress.getLocalHost(), 9998);datagramSocket
.send(datagramPacket
);datagramSocket
.close();System.out
.println("===接收端已終止===");}
}
發送端
package com.tao.udp;import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPSenderB {public static void main(String[] args
)throws Exception {DatagramSocket datagramSocket
= new DatagramSocket(9998);byte[] data
= "hello 明天吃火鍋".getBytes();
DatagramPacket datagramPacket
= new DatagramPacket(data
, data
.length
,InetAddress.getLocalHost(), 9999);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;
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(); 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()); 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;
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;
public class Homework02ReceiverA {public static void main(String[] args
) throws IOException {DatagramSocket datagramSocket
= new DatagramSocket(9999);byte[] buf
= new byte[1024];DatagramPacket packet
= new DatagramPacket(buf
, buf
.length
);System.out
.println("接收端A,9999端口, 等待接收數據....");datagramSocket
.receive(packet
);int length
= packet
.getLength(); byte[] data
= packet
.getData(); String s
= new String(data
, 0, length
);String answer
= "";if ("四大名著有哪些".equals(s
) ){answer
= "四大名著 《紅樓夢》《三國演義》《西游記》《水滸傳》";}else {answer
= "你說啥?";}
data
= answer
.getBytes();
DatagramPacket datagramPacket
= new DatagramPacket(data
, data
.length
,InetAddress.getLocalHost(), 9998);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;
public class Homework02SenderB {public static void main(String[] args
)throws Exception {DatagramSocket datagramSocket
= new DatagramSocket(9998);System.out
.println("請輸入查詢內容...");Scanner scanner
= new Scanner(System.in
);String a
= scanner
.next();byte[] data
= a
.getBytes();
DatagramPacket datagramPacket
= new DatagramPacket(data
, data
.length
,InetAddress.getLocalHost(), 9999);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;
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
);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;
public class Homework03Server {public static void main(String[] args
) throws Exception {ServerSocket serverSocket
= new ServerSocket(9999);Socket socket
= serverSocket
.accept();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
);String resFileName
= "";if ("高山流水".equals(downLoadFileName
)){resFileName
= "src\\高山流水.mp3";} else {resFileName
= "src\\青山.mp3";}BufferedInputStream bis
= new BufferedInputStream(new FileInputStream(resFileName
));byte[] bytes
= StreamUtils.streamtoByteArray(bis
);BufferedOutputStream bos
= new BufferedOutputStream(socket
.getOutputStream());bos
.write(bytes
);socket
.shutdownOutput();serverSocket
.close();socket
.close();inputStream
.close();bis
.close();bos
.close();System.out
.println("服務端退出");}
}
總結
以上是生活随笔為你收集整理的Java基础 - 网络编程 - netstat指令,UDP通信编程和网络编程总练习的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。