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

歡迎訪問 生活随笔!

生活随笔

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

java

Java21-day12【网络编程(网络编程入门(ip地址、端口、协议、InetAddress)、UDP通信程序、TCP通信程序)】

發(fā)布時間:2024/9/30 java 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java21-day12【网络编程(网络编程入门(ip地址、端口、协议、InetAddress)、UDP通信程序、TCP通信程序)】 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 視頻+資料【鏈接:https://pan.baidu.com/s/1MdFNUADVSFf-lVw3SJRvtg? ?提取碼:zjxs】
  • Java基礎--學習筆記(零起點打開java世界的大門)--博客匯總表

? ?? ??

目? ?錄

01_網(wǎng)絡編程概述

1.1、網(wǎng)絡編程概述

02_網(wǎng)絡編程三要素

1.2、網(wǎng)絡編程三要素

03_IP地址

1.3、IP地址

04_InetAddress

1.4、InetAddress的使用

05_端口和協(xié)議

1.5、端口

1.6、協(xié)議

06_UDP發(fā)送數(shù)據(jù)

2.1、UDP通信原理

2.2、UDP發(fā)送數(shù)據(jù)

07_UDP接收數(shù)據(jù)

2.3、UDP接收數(shù)據(jù)

08_UDP通信程序練習

2.4、UDP通信程序練習

09_TCP發(fā)送數(shù)據(jù)

3.1、TCP通信原理

3.2、TCP發(fā)送數(shù)據(jù)

10_TCP接收數(shù)據(jù)

3.3、TCP接收數(shù)據(jù)

11_TCP通信程序練習1(服務器給出反饋)

3.4、TCP通信程序練習

12_TCP通信程序練習2(客戶端數(shù)據(jù)來自于鍵盤錄入)

3.4、TCP通信程序練習

13_TCP通信程序練習3(服務器數(shù)據(jù)寫入文本文件)

3.4、TCP通信程序練習

14_TCP通信程序練習4(客戶端數(shù)據(jù)來自于文本文件)

3.4、TCP通信程序練習

15_TCP通信程序練習5(上傳文件服務器給出反饋)

3.4、TCP通信程序練習

1、ServerDemo.java

2、ClientDemo.java

16_TCP通信程序練習6(多線程實現(xiàn)文件上傳)

3.4、TCP通信程序練習

1、ServerDemo.java

2、ClientDemo.java

3、ServerThread.java


01_網(wǎng)絡編程概述

? ??

1.1、網(wǎng)絡編程概述

計算機網(wǎng)絡:

  • 是指將地理位置不同的具有獨立功能的多臺計算機及其外部設備,通過通信線路連接起來,在網(wǎng)絡操作系統(tǒng),網(wǎng)絡管理軟件及網(wǎng)絡通信協(xié)議的管理和協(xié)調下,實現(xiàn)資源共享和信息傳遞的計算機系統(tǒng)。

網(wǎng)絡編程:

  • 在網(wǎng)絡通信協(xié)議下,實現(xiàn)網(wǎng)絡互連的不同計算機上運行的程序間可以進行數(shù)據(jù)交換。

02_網(wǎng)絡編程三要素

1.2、網(wǎng)絡編程三要素

IP地址

  • 要想讓網(wǎng)絡中的計算機能夠互相通信,必須為每臺計算機指定一個標識號,通過這個標識號來指定要接收數(shù)據(jù)的計算機和識別發(fā)送的計算機,而IP地址就是這個標識號。也就是設備的標識。

端口

  • 網(wǎng)絡的通信,本質上是兩個應用程序的通信。每臺計算機都有很多的應用程序,那么在網(wǎng)絡通信時,如何區(qū)分這些應用程序呢?如果說IP地址可以唯一標識網(wǎng)絡中的設備,那么端口號就可以唯一標識設備中的應用程序了。也就是應用程序的標識。

協(xié)議

  • 通過計算機網(wǎng)絡可以使多臺計算機實現(xiàn)連接,位于同一個網(wǎng)絡中的計算機在進行連接和通信時需要遵守一定的規(guī)則,這就好比在道路中行駛的汽車一定要遵守交通規(guī)則一樣。在計算機網(wǎng)絡中,這些連接和通信的規(guī)則被稱為網(wǎng)絡通信協(xié)議,它對數(shù)據(jù)的傳輸格式、傳輸速率、傳輸步驟等做了統(tǒng)一規(guī)定,通信雙方必須同時遵守才能完成數(shù)據(jù)交換。常見的協(xié)議有UDP協(xié)議和TCP協(xié)議。

03_IP地址

1.3、IP地址

IP地址:是網(wǎng)絡中設備的唯一標識。

IP地址分為兩大類:

  • IPv4:是給每個連接在網(wǎng)絡上的主機分配一個32bit地址。按照TCP/IP規(guī)定,IP地址用二進制來表示,每 個IP地址長32bit,也就是4個字節(jié)。例如一個采用二進制形式的IP地址是“11000000 10101000 00000001 01000010”,這么長的地址,處理起來也太費勁了。為了方便使用,IP地址經(jīng)常被寫成十進制的形式,中間使用符號“.”分隔不同的字節(jié)。于是,上面的IP地址可以表示為“192.168.1.66”。IP地址的這種表示法叫做“點分十進制表示法”,這顯然比1和0容易記憶得多。
  • IPv6:由于互聯(lián)網(wǎng)的蓬勃發(fā)展,IP地址的需求量愈來愈大,但是網(wǎng)絡地址資源有限,使得IP的分配越發(fā)緊張。為了擴大地址空間,通過IPv6重新定義地址空間,采用128位地址長度,每16個字節(jié)一組,分成8組十六進制數(shù),這樣就解決了網(wǎng)絡地址資源數(shù)量不夠的問題。

DOS常用命令:

  • ipconfig:查看本機IP地址。
  • ping IP地址:檢查網(wǎng)絡是否連通。

特殊IP地址:

  • 127.0.0.1:是回送地址,可以代表本機地址,一般用來測試使用。

? ??

?

04_InetAddress

1.4、InetAddress的使用

為了方便我們對IP地址的獲取和操作,Java提供了一個類InetAddress供我們使用。

InetAddress:此類表示Internet協(xié)議(IP)地址。

InetAddress類,無構造方法,大多數(shù)方法 都是 非靜態(tài)方法。此類提供靜態(tài)方式,得到該類對象。

??

05_端口和協(xié)議

1.5、端口

端口:設備上應用程序的唯一標識。

端口號:用兩個字節(jié)表示的整數(shù),它的取值范圍是0~65535。其中,0~1023之間的端口號用于一些知名的網(wǎng)絡服務和應用,普通的應用程序需要使用1024以上的端口號。如果端口號被另外一個服務或應用所占用,會導致當前程序啟動失敗(啟動失敗,修改端口號)。

1.6、協(xié)議

協(xié)議:計算機網(wǎng)絡中,連接和通信的規(guī)則被稱為網(wǎng)絡通信協(xié)議。

UDP協(xié)議

  • 用戶數(shù)據(jù)報協(xié)議(User Datagram Protocol)
  • UDP是無連接通信協(xié)議,即在數(shù)據(jù)傳輸時,數(shù)據(jù)的發(fā)送端和接收端不建立邏輯連接。簡單來說,當一臺計算機向另外一臺計算機發(fā)送數(shù)據(jù)時,發(fā)送端不會確認接收端是否存在,就會發(fā)出數(shù)據(jù),同樣接收端在收到數(shù)據(jù)時,也不會向發(fā)送端反饋是否收到數(shù)據(jù)。由于使用UDP協(xié)議消耗資源小,通信效率高,所以通常都會用于音頻、視頻和普通數(shù)據(jù)的傳輸。
  • 例如視頻會議通常采用UDP協(xié)議,因為這種情況即使偶爾丟失一兩個數(shù)據(jù)包,也不會對接收結果產(chǎn)生太大影響。但是在使用UDP協(xié)議傳送數(shù)據(jù)時,由于UDP的面向無連接性,不能保證數(shù)據(jù)的完整性,因此在傳輸重要數(shù)據(jù)時不建議使用UDP協(xié)議。

TCP協(xié)議

  • 傳輸控制協(xié)議 (Transmission Control Protocol)
  • TCP協(xié)議是面向連接的通信協(xié)議,即傳輸數(shù)據(jù)之前,在發(fā)送端和接收端建立邏輯連接,然后再傳輸數(shù)據(jù),它提供了兩臺計算機之間可靠無差錯的數(shù)據(jù)傳輸。在TCP連接中必須要明確客戶端與服務器端,由客戶端向服務端發(fā)出連接請求,每次連接的創(chuàng)建都需要經(jīng)過“三次握手”。
  • 三次握手:TCP協(xié)議中,在發(fā)送數(shù)據(jù)的準備階段,客戶端與服務器之間的三次交互,以保證連接的可靠。

第一次握手,客戶端向服務器端發(fā)出連接請求,等待服務器確認。

第二次握手,服務器端向客戶端回送一個響應,通知客戶端收到了連接請求。

第三次握手,客戶端再次向服務器端發(fā)送確認信息,確認連接。

  • 完成三次握手,連接建立后,客戶端和服務器就可以開始進行數(shù)據(jù)傳輸了。由于這種面向連接的特性,TCP協(xié)議可以保證傳輸數(shù)據(jù)的安全,所以應用十分廣泛。例如上傳文件、下載文件、瀏覽網(wǎng)頁等。

06_UDP發(fā)送數(shù)據(jù)

2.1、UDP通信原理

Java中的UDP通信

  • UDP協(xié)議是一種不可靠的網(wǎng)絡協(xié)議,它在通信的兩端各建立一個Socket對象,但是這兩個Socket只是發(fā)送,接收數(shù)據(jù)的對象,因此對于基于UDP協(xié)議的通信雙方而言,沒有所謂的客戶端和服務器的概念。
  • Java提供了DatagramSocket類作為基于UDP協(xié)議的Socket。? ?通過DatagramSocket實現(xiàn)UDP發(fā)送、接收數(shù)據(jù)。

2.2、UDP發(fā)送數(shù)據(jù)

發(fā)送數(shù)據(jù)的步驟:

  • ①創(chuàng)建發(fā)送端的Socket對象(DatagramSocket)? ?//?UDP協(xié)議,是用戶數(shù)據(jù)包協(xié)議。

DatagramSocket?()

  • ②創(chuàng)建數(shù)據(jù),并把數(shù)據(jù)打包

DatagramPacket(bys[] buf, int length, InetAddress address, int port);

  • ③調用DatagramSocket對象的方法發(fā)送數(shù)據(jù)

void send(DatagramPacket p)

  • ④關閉發(fā)送端

void close()

? ??

?

數(shù)據(jù)發(fā)送成功【沒有接收端】!把數(shù)據(jù)發(fā)送到xxx主機的xxxx端口。

07_UDP接收數(shù)據(jù)

2.3、UDP接收數(shù)據(jù)

接收數(shù)據(jù)的步驟:

  • ①創(chuàng)建接收端的Socket對象(DatagramSocket)

DatagramSocket(int port)

  • ②創(chuàng)建一個數(shù)據(jù)包,用于接收數(shù)據(jù)? ?//?接收發(fā)送端的數(shù)據(jù)

DatagramPacket(byte[] buf, int length)

  • ③調用DatagramSocket對象的方法接收數(shù)據(jù)

void receive(DatagramPacket p)

  • ④解析數(shù)據(jù)包,并把數(shù)據(jù)在控制臺顯示

byte[] getData()? ?// 得到數(shù)據(jù)緩沖區(qū)

int getLength()??? // 得到發(fā)送端實際發(fā)送了多少數(shù)據(jù)。

  • ⑤關閉接收端

void close()

優(yōu)化代碼:

?

08_UDP通信程序練習

2.4、UDP通信程序練習

按照下面的要求實現(xiàn)程序(案例需求):

  • UDP發(fā)送數(shù)據(jù):數(shù)據(jù)來自于鍵盤錄入,直到輸入的數(shù)據(jù)是886,發(fā)送數(shù)據(jù)結束。
  • UDP接收數(shù)據(jù):因為接收端不知道發(fā)送端什么時候停止發(fā)送,故采用死循環(huán)接收。

09_TCP發(fā)送數(shù)據(jù)

3.1、TCP通信原理

Java中的TCP通信

TCP通信協(xié)議是一種可靠的網(wǎng)絡協(xié)議,它在通信的兩端各建立一個Socket對象,從而在通信的兩端形成網(wǎng)絡虛擬鏈路,一旦建立了虛擬的網(wǎng)絡鏈路,兩端的程序就可以通過虛擬鏈路進行通信。

Java對基于TCP協(xié)議的的網(wǎng)絡提供了良好的封裝,使用Socket對象來代表兩端的通信端口,并通過Socket產(chǎn)生IO流來進行網(wǎng)絡通信。

Java為客戶端提供了Socket類,為服務器端提供了ServerSocket類。

? ?通過“網(wǎng)絡虛擬鏈路”進行通信。通過IO流進行通信。

3.2、TCP發(fā)送數(shù)據(jù)

發(fā)送數(shù)據(jù)的步驟:

  • ①創(chuàng)建客戶端的Socket對象(Socket)? ?// TCP協(xié)議:傳輸控制協(xié)議,通過IO流傳輸數(shù)據(jù)

Socket(String host, int port)? ?// 指定主機、端口

  • ②獲取輸出流,寫數(shù)據(jù)? ?// IO流寫數(shù)據(jù)

OutputStream getOutputStream()? ?// 得到字節(jié)輸出流

  • ③釋放資源

void close()

10_TCP接收數(shù)據(jù)

3.3、TCP接收數(shù)據(jù)

接收數(shù)據(jù)的步驟:

  • ①創(chuàng)建服務器端的Socket對象(ServerSocket)

ServerSocket(int port)

  • ②監(jiān)聽客戶端連接,返回一個Socket對象

Socket accept()

  • ③獲取輸入流,讀數(shù)據(jù),并把數(shù)據(jù)顯示在控制臺

InputStream getInputStream()

  • ④釋放資源

void close()

package src.com.itheima_04;import java.io.IOException; import java.io.InputStream; import java.net.ServerSocket; import java.net.Socket; /*TCP接收數(shù)據(jù)的步驟1:創(chuàng)建服務器端的Socket對象(ServerSocket)2:獲取輸入流,讀數(shù)據(jù),并把數(shù)據(jù)顯示在控制臺3:釋放資源*/ public class ServerDemo {public static void main(String[] args) throws IOException {//1:創(chuàng)建服務器端的Socket對象(ServerSocket)//ServerSocket?(int port) 創(chuàng)建綁定到指定端口的服務器套接字ServerSocket ss = new ServerSocket(10000);//Socket accept?() 偵聽要連接到此套接字并接受它Socket s = ss.accept();//2:獲取輸入流,讀數(shù)據(jù),并把數(shù)據(jù)顯示在控制臺InputStream is = s.getInputStream();byte[] bys = new byte[1024];int len = is.read(bys);String data = new String(bys,0,len);System.out.println("數(shù)據(jù)是:" + data);//3:釋放資源s.close();ss.close();} }

11_TCP通信程序練習1(服務器給出反饋)

3.4、TCP通信程序練習

練習1

  • 客戶端:發(fā)送數(shù)據(jù),接收服務器反饋。
  • 服務器:接收數(shù)據(jù),給出反饋。

案例分析

  • 客戶端創(chuàng)建對象,使用輸出流輸出數(shù)據(jù)。
  • 服務端創(chuàng)建對象,使用輸入流接受數(shù)據(jù)。
  • 服務端使用輸出流給出反饋數(shù)據(jù)。
  • 客戶端使用輸入流接受反饋數(shù)據(jù)。
  • 12_TCP通信程序練習2(客戶端數(shù)據(jù)來自于鍵盤錄入)

    3.4、TCP通信程序練習

    練習2

    • 客戶端:數(shù)據(jù)來自于鍵盤錄入,直到輸入的數(shù)據(jù)是886,發(fā)送數(shù)據(jù)結束。
    • 服務器:接收到的數(shù)據(jù)在控制臺輸出。

    案例分析

  • 客戶端創(chuàng)建對象,使用鍵盤錄入循環(huán)接受數(shù)據(jù),接受一行發(fā)送一行,直到鍵盤錄入886為止。
  • 服務端創(chuàng)建對象,使用輸入流按行循環(huán)接受數(shù)據(jù),直到接受到null為止。
  • 13_TCP通信程序練習3(服務器數(shù)據(jù)寫入文本文件)

    3.4、TCP通信程序練習

    練習3

    • 客戶端:數(shù)據(jù)來自于鍵盤錄入,直到輸入的數(shù)據(jù)是886,發(fā)送數(shù)據(jù)結束。
    • 服務器:接收到的數(shù)據(jù)寫入文本文件。

    案例分析

  • 客戶端創(chuàng)建對象,使用鍵盤錄入循環(huán)接受數(shù)據(jù),接受一行發(fā)送一行,直到鍵盤錄入886為止。
  • 服務端創(chuàng)建對象,創(chuàng)建輸出流對象指向文件,每接受一行數(shù)據(jù)后使用輸出流輸出到文件中,直到接受到null為止。
  • 14_TCP通信程序練習4(客戶端數(shù)據(jù)來自于文本文件)

    3.4、TCP通信程序練習

    練習4

    • 客戶端:數(shù)據(jù)來自于文本文件。
    • 服務器:接收到的數(shù)據(jù)寫入文本文件。

    案例分析

  • 創(chuàng)建客戶端,創(chuàng)建輸入流對象指向文件,從文件循環(huán)讀取數(shù)據(jù),每讀取一行就使用輸出流給服務器輸出一行。
  • 創(chuàng)建服務端,創(chuàng)建輸出流對象指向文件,從客戶端接受數(shù)據(jù),每接受一行就給文件中輸出一行。
  • 15_TCP通信程序練習5(上傳文件服務器給出反饋)

    3.4、TCP通信程序練習

    練習5

    • 客戶端:數(shù)據(jù)來自于文本文件,接收服務器反饋。
    • 服務器:接收到的數(shù)據(jù)寫入文本文件,給出反饋。
    • 出現(xiàn)問題:程序一直等待。
    • 原因:讀數(shù)據(jù)的方法是阻塞式的。
    • 解決辦法:自定義結束標記;使用shutdownOutput()方法(推薦)。

    案例分析

  • 創(chuàng)建客戶端對象,創(chuàng)建輸入流對象指向文件,每讀入一行數(shù)據(jù)就給服務器輸出一行數(shù)據(jù),輸出結束后使用shutdownOutput()方法告知服務端傳輸結束。
  • 創(chuàng)建服務器對象,創(chuàng)建輸出流對象指向文件,每接受一行數(shù)據(jù)就使用輸出流輸出到文件中,傳輸結束后。使用輸出流給客戶端反饋信息。
  • 客戶端接受服務端的回饋信息。
  • 1、ServerDemo.java

    package src.com.itheima_09;import java.io.*; import java.net.ServerSocket; import java.net.Socket;/*服務器:接收到的數(shù)據(jù)寫入文本文件,給出反饋*/ public class ServerDemo {public static void main(String[] args) throws IOException {//創(chuàng)建服務器Socket對象ServerSocket ss = new ServerSocket(10000);//監(jiān)聽客戶端連接,返回一個對應的Socket對象Socket s = ss.accept();//接收數(shù)據(jù)BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));//把數(shù)據(jù)寫入文本文件BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java"));String line;while ((line = br.readLine()) != null) { //等待讀取數(shù)據(jù) // if("886".equals(line)) { // break; // }bw.write(line);bw.newLine();bw.flush();}// System.out.println(11111);//給出反饋BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));bwServer.write("文件上傳成功");bwServer.newLine();bwServer.flush();//釋放資源bw.close();ss.close();} }

    2、ClientDemo.java

    package src.com.itheima_09;import java.io.*; import java.net.Socket;/*客戶端:數(shù)據(jù)來自于文本文件,接收服務器反饋*/ public class ClientDemo {public static void main(String[] args) throws IOException {//創(chuàng)建客戶端Socket對象Socket s = new Socket("192.168.1.66", 10000);//封裝文本文件的數(shù)據(jù)BufferedReader br = new BufferedReader(new FileReader("InetAddressDemo.java"));//封裝輸出流寫數(shù)據(jù)BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line;while ((line = br.readLine()) != null) {bw.write(line);bw.newLine();bw.flush();}// System.out.println(22222);//自定義結束標記 // bw.write("886"); // bw.newLine(); // bw.flush();//public void shutdownOutput?()s.shutdownOutput();//接收反饋BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream()));String data = brClient.readLine(); //等待讀取數(shù)據(jù)System.out.println("服務器的反饋:" + data);//釋放資源br.close();s.close();} }

    16_TCP通信程序練習6(多線程實現(xiàn)文件上傳)

    3.4、TCP通信程序練習

    練習6

    • 客戶端:數(shù)據(jù)來自于文本文件,接收服務器反饋。
    • 服務器:接收到的數(shù)據(jù)寫入文本文件,給出反饋,代碼用線程進行封裝,為每一個客戶端開啟一個線程。

    案例分析

  • 創(chuàng)建客戶端對象,創(chuàng)建輸入流對象指向文件,每讀入一行數(shù)據(jù)就給服務器輸出一行數(shù)據(jù),輸出結束后使用shutdownOutput()方法告知服務端傳輸結束。
  • 創(chuàng)建多線程類,在run()方法中讀取客戶端發(fā)送的數(shù)據(jù),為了防止文件重名,使用計數(shù)器給文件名編號,接受結束后使用輸出流給客戶端發(fā)送反饋信息。
  • 創(chuàng)建服務端對象,每監(jiān)聽到一個客戶端則開啟一個新的線程接受數(shù)據(jù)。
  • 客戶端接受服務端的回饋信息。
  • 1、ServerDemo.java

    package src.com.itheima_10;import java.io.IOException; import java.net.ServerSocket; import java.net.Socket;/*服務器:接收到的數(shù)據(jù)寫入文本文件,給出反饋,代碼用線程進行封裝,為每一個客戶端開啟一個線程*/ public class ServerDemo {public static void main(String[] args) throws IOException {//創(chuàng)建服務器Socket對象ServerSocket ss = new ServerSocket(10000);while (true) {//監(jiān)聽客戶端連接,返回一個對應的Socket對象Socket s = ss.accept();//為每一個客戶端開啟一個線程new Thread(new ServerThread(s)).start();}// ss.close();} }

    2、ClientDemo.java

    package src.com.itheima_10;import java.io.*; import java.net.Socket;/*客戶端:數(shù)據(jù)來自于文本文件,接收服務器反饋*/ public class ClientDemo {public static void main(String[] args) throws IOException {//創(chuàng)建客戶端Socket對象Socket s = new Socket("127.0.0.1", 10000);//封裝文本文件的數(shù)據(jù)BufferedReader br = new BufferedReader(new FileReader("s.txt"));//封裝輸出流寫數(shù)據(jù)BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));String line;while ((line = br.readLine()) != null) {bw.write(line);bw.newLine();bw.flush();}s.shutdownOutput();//接收反饋BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream()));String data = brClient.readLine(); //等待讀取數(shù)據(jù)System.out.println("服務器的反饋:" + data);//釋放資源br.close();s.close();} }

    3、ServerThread.java

    package src.com.itheima_10;import java.io.*; import java.net.Socket;public class ServerThread implements Runnable {private Socket s;public ServerThread(Socket s) {this.s = s;}@Overridepublic void run() {try {//接收數(shù)據(jù)寫到文本文件BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); // BufferedWriter bw = new BufferedWriter(new FileWriter("myNet\\Copy.java"));//解決名稱沖突問題int count = 0;File file = new File("Copy[" + count + "].txt");while (file.exists()) {count++;file = new File("Copy[" + count + "].txt");}BufferedWriter bw = new BufferedWriter(new FileWriter(file));String line;while ((line = br.readLine()) != null) {bw.write(line);bw.newLine();bw.flush();}//給出反饋BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));bwServer.write("文件上傳成功");bwServer.newLine();bwServer.flush();//釋放資源s.close();} catch (IOException e) {e.printStackTrace();}} }

    🙌? ?🤞? ??? ?😘? ?奧里給~

    總結

    以上是生活随笔為你收集整理的Java21-day12【网络编程(网络编程入门(ip地址、端口、协议、InetAddress)、UDP通信程序、TCP通信程序)】的全部內容,希望文章能夠幫你解決所遇到的問題。

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