網路編程2--畢向東java基礎教程視頻學習筆記

来源:http://www.cnblogs.com/wsw-tcsygrwfqd/archive/2016/01/16/5131781.html
-Advertisement-
Play Games

Day 2308 Udp接收端09 Udp鍵盤錄入數據方式10 Udp聊天11 TCP傳輸12 TCP傳輸213 TCP練習14 TCP複製文件08 Udp接收端需求:定義一個應用程式,用於接收udp協議傳輸的數據並處理。思路:1.定義UdpSocket服務。2.定義一個數據報包,因為要存儲接收到的...


Day 23

08 Udp接收端
09 Udp鍵盤錄入數據方式
10 Udp聊天
11 TCP傳輸
12 TCP傳輸2
13 TCP練習
14 TCP複製文件

 

08 Udp接收端

需求:
定義一個應用程式,用於接收udp協議傳輸的數據並處理。

思路:
1.定義UdpSocket服務。
2.定義一個數據報包,因為要存儲接收到的位元組數據,
而數據報包對象中有更多的功能可以提取位元組數據中不同的數據信息。
3.通過socket服務的receive方法將接收到的數據存入已經定義好的數據報包中。
4.通過數據報包對象的特有功能。將這些不同的數據取出,列印在控制臺上。
5.關閉資源。

 1 import java.net.*;
 2 public class UdpReceive 
 3 {
 4     public static void main(String[] args) 
 5     {
 6         try
 7         {
 8             //1.創建Udp Socket,建立端點
 9         DatagramSocket ds=new DatagramSocket(10000);
10 
11         //2.定義數據報包,用來存儲數據
12         byte[] buf=new byte[1024];
13         DatagramPacket dp=new DatagramPacket(buf,buf.length);
14 
15         //3.通過Socket服務的receive方法接收到的數據存入數據包
16         ds.receive(dp);
17 
18         //通過數據報包中的方法獲取其中的數據
19         String ip=dp.getAddress().getHostAddress();
20         String data=new String(dp.getData(),0,dp.getLength());
21         int port=dp.getPort();
22 
23         System.out.println(ip+"::"+data+"::"+port);
24         //關閉資源
25          ds.close();
26             
27         }
28         catch (Exception e)
29         {
30             e.printStackTrace();
31         }
32     
33     }
34 }
View Code

 

09 Udp鍵盤錄入數據方式

read和receive都是阻塞式方法,如果接收不到數據,就會等待。

java.net包和java.io包通常一起使用。

測試程式如下:

 1 public class UdpSend2 
 2 {
 3     public static void main(String[] args) throws IOException
 4     {
 5         DatagramSocket ds=new DatagramSocket(10001);
 6         BufferedReader bufr=
 7             new BufferedReader(new InputStreamReader(System.in));
 8         String line=null;
 9         while((line=bufr.readLine())!=null)
10         {
11             byte[] buf=line.getBytes();
12             
13             DatagramPacket dp=new DatagramPacket(buf,buf.length,InetAddress.getLocalHost(),10000);
14             ds.send(dp);
15         }
16         ds.close();
17     }
18 }
View Code
 1 import java.net.*;
 2 import java.io.*;
 3 public class UdpReceived2 
 4 {
 5     public static void main(String[] args) throws Exception
 6     {
 7         DatagramSocket ds=new DatagramSocket(10000);
 8         while(true)
 9         {
10             byte[] buf=new byte[1024];
11             DatagramPacket dp=new DatagramPacket(buf,buf.length);
12             ds.receive(dp);
13             String ip=dp.getAddress().getHostAddress();
14             String data=new String(buf,0,dp.getLength());
15             System.out.println(ip+"::"+data);
16         }
17         
18     }
19 }
View Code

 

10 Udp聊天

實現簡單的聊天功能,以ip地址辨別不同身份。

 1 /*
 2 聊天
 3 */
 4 import java.net.*;
 5 import java.io.*;
 6 class Send implements Runnable 
 7 {
 8     private DatagramSocket s;
 9     public Send(DatagramSocket s)
10     {
11         this.s=s;
12     }
13     public void run()
14     {
15         try
16         {
17             BufferedReader br=
18                 new BufferedReader(new InputStreamReader(System.in));
19             String line=null;
20             while((line=br.readLine())!=null)
21             {
22                 if("over".equals(line))
23                     break;
24                 byte[] buf=line.getBytes();
25                 DatagramPacket dp=
26                     new DatagramPacket(buf,buf.length,InetAddress.getByName("172.29.115.1"),10005);
27                 s.send(dp);
28 
29             }
30         }
31         catch (Exception e)
32         {
33             throw new RuntimeException("發送端失敗!");
34 
35         }
36     }
37 }
38 class Receive implements Runnable 
39 {
40     private DatagramSocket s;
41     public Receive(DatagramSocket s)
42     {
43         this.s=s;
44     }
45     public void run()
46     {
47         try
48         {
49             while(true)
50             {
51                 byte[] buf=new byte[1024];
52                 DatagramPacket dp=new DatagramPacket(buf,buf.length);
53                 s.receive(dp);
54                 String ip=dp.getAddress().getHostAddress();
55                 String data=new String(dp.getData(),0,dp.getLength());
56                 System.out.println(ip+"::"+data);
57 
58             }
59         }
60         catch (Exception e)
61         {
62             throw new RuntimeException("接受端失敗!");
63 
64         }
65     }
66 }
67 public class ChatDemo
68 {
69     public static void main(String[] args)throws Exception
70     {
71         DatagramSocket send=new DatagramSocket();
72         DatagramSocket rece=new DatagramSocket(10005);
73 
74         new Thread(new Send(send)).start();
75         new Thread(new Receive(rece)).start();
76     }
77 
78 }
View Code

 

11 TCP傳輸

TCP傳輸
Socket和ServerSocket
建立客戶端和伺服器端
建立連接後,通過Socket中的IO流進行數據傳輸
關閉Socket
同樣,伺服器端和客戶端是兩個獨立的應用程式。

 1 /*
 2 需求:給伺服器端發送一個文本數據
 3 步驟:
 4 1.創建Socket服務,並指定要連接的主機和埠
 5 */
 6 import java.net.*;
 7 import java.io.*;
 8 class  TcpClient
 9 {
10     public static void main(String[] args) 
11     {
12         try
13         {
14             //創建客戶端的Socket服務,指定目的主機和埠
15             Socket s=new Socket("127.0.0.1",10000);
16 
17             //為了發送數據,應該獲取Socket中的輸出流。
18             OutputStream out=s.getOutputStream();
19 
20             out.write("hahaha".getBytes());
21             s.close();
22 
23         }
24         catch (Exception e)
25         {
26             throw new RuntimeException("客戶端建立失敗!");
27         }
28         
29 
30     }
31 }
32 /*
33 需求:定義端點接收數據並列印在控制台。
34 服務端:
35 1.建立服務端的socket服務,ServerSocket();
36 並監聽一個埠
37 2.獲取連接過來的客戶端對象。
38 通過ServerSocket的accept方法。
39 沒有連接,就一直等待,所以這是一個阻塞式方法。
40 3.客戶端如果發送來數據,那麼服務端要使用對應的客戶端對象,並獲取到該客戶端
41 對象的讀取流來讀取發過來的數據。
42 4.關閉服務端。
43 */
44 class TcpServer 
45 {
46     public static void main(String[] args) 
47     {
48         try
49         {
50         ServerSocket ss=new ServerSocket(10000);
51         Socket s=ss.accept();
52         String ip=s.getInetAddress().getHostAddress();
53         
54         InputStream in=s.getInputStream();
55         byte[] buf=new byte[1024];
56         int len=in.read(buf);
57         System.out.print(ip+":");
58         System.out.println(new String(buf,0,len));
59 
60         s.close();
61             
62         }
63         catch (Exception e)
64         {
65             throw new RuntimeException("服務端建立失敗!");
66         }
67 
68         
69     }
70 }
View Code

 


12 TCP傳輸2

演示tcp的傳輸的客戶端和服務端的互訪
需求:客戶端給服務端發送數據,服務端收到後,給客戶端反饋信息。

客戶端:
1.建立socket服務。指定要連接主機和埠。
2.獲取socket流中的輸出流。將數據寫到該流中,通過網路發送給服務端。
3.獲取socket流中的輸入流,將伺服器反饋的數據獲取到,並列印。
4.關閉客戶端。

 1 import java.net.*;
 2 import java.io.*;
 3 class TcpClient2 
 4 {
 5     public static void main(String[] args) 
 6     {
 7         try
 8         {
 9             Socket s=new Socket("172.29.115.1",10000);
10         OutputStream os=s.getOutputStream();
11         os.write("你好啊,服務端!".getBytes());
12         
13         byte[] buf=new byte[1024];
14         InputStream is=s.getInputStream();
15         int len=is.read(buf);
16         System.out.println(new String(buf,0,len));
17         s.close();
18         }
19         catch (Exception e)
20         {
21             throw new RuntimeException("客戶端建立失敗!");
22         }
23 
24     }
25 }
26 class TcpServer2
27 {
28     public static void main(String[] args) 
29     {
30         try
31         {
32             ServerSocket ss=new ServerSocket(10000);
33             Socket s=ss.accept();
34 
35             InputStream is=s.getInputStream();
36             byte[] buf=new byte[1024];
37             int len=is.read(buf);
38             System.out.println(s.getInetAddress().getHostAddress()+"::"+new String(buf,0,len));
39 
40             OutputStream os=s.getOutputStream();
41             os.write("你也好,歡迎光臨!".getBytes());
42 
43             s.close();
44             ss.close();
45 
46             
47         }
48         catch (Exception e)
49         {
50             throw new RuntimeException("服務端建立失敗!");
51         }
52     }
53 }
View Code

 


13 TCP練習

需求:建立一個文本形式轉換伺服器。
客戶端給服務端發送文本,服務端會將文本轉換成大寫再返回給服務端。
而且,客戶端可以不斷地進行文本發送,當客戶端輸入over時,轉換結束。

分析:
客戶端:
既然是操作設備上的數據,那麼就可以使用io技術,並且按照io的操作規律來思考。
源:鍵盤錄入
目的:網路設備,網路輸出流
而且操作的是文本數據,可以選擇字元流。

步驟:
1.建立服務
2.獲取鍵盤錄入
3.將數據發送給服務端
4.接受服務端返回的大寫數據
5.結束,關閉資源。

 1 import java.net.*;
 2 import java.io.*;
 3 class  TransClient
 4 {
 5     public static void main(String[] args) throws Exception
 6     {
 7         //建立socket服務
 8         Socket s=new Socket("172.29.115.1",10000);
 9         //獲取鍵盤錄入
10         BufferedReader bufr=
11             new BufferedReader(new InputStreamReader(System.in));
12         //向服務端發送數據
13         BufferedWriter bufOut=
14             new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
15         String line=null;
16         //接受服務端返回的數據
17         BufferedReader bufIn=
18             new BufferedReader(new InputStreamReader(s.getInputStream()));
19         while((line=bufr.readLine())!=null)
20         {
21             if("over".equals(line))
22                 break;
23             bufOut.write(line);
24             bufOut.newLine();
25             bufOut.flush();
26             
27             String str=bufIn.readLine();
28             System.out.println("server:"+str);
29 
30         }
31         bufr.close();
32         s.close();
33         
34 
35         
36         
37     }
38 }
39 class  TransServer
40 {
41     public static void main(String[] args) throws Exception
42     {
43         //建立服務
44         ServerSocket  ss=new ServerSocket(10000);
45         Socket s=ss.accept();
46         
47         //接受客戶端的數據
48         BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
49 
50         //返回給客戶端大寫的文本
51         BufferedWriter bufOut=new BufferedWriter(new OutputStreamWriter(s.getOutputStream()));
52 
53         String line=null;
54 
55         while((line=bufIn.readLine())!=null)
56         {
57             System.out.println(line);
58             bufOut.write(line.toUpperCase());
59             bufOut.newLine();
60             bufOut.flush();
61         }
62         
63         ss.close();
64 
65         
66     }
67 }
View Code

 


14 TCP複製文件

 從客戶端向服務端上傳文件。

 1 import java.net.*;
 2 import java.io.*;
 3 class  TextClient
 4 {
 5     public static void main(String[] args) throws Exception
 6     {
 7         Socket s=new Socket("127.0.0.1",10006);
 8         BufferedReader bufr=
 9             new BufferedReader(new FileReader("ChatDemo.java"));
10         PrintWriter out=new PrintWriter(s.getOutputStream(),true);
11         String line=null;
12         while((line=bufr.readLine())!=null)
13         {
14             out.println(line);
15         }
16         s.shutdownOutput();
17         BufferedReader bufIn=new BufferedReader(new InputStreamReader(s.getInputStream()));
18         String  str=bufIn.readLine();
19         System.out.println("server:"+str);
20         bufr.close();
21         s.close();
22 
23         
24     }
25 }
26 class  TextServer
27 {
28     public static void main(String[] args) throws Exception
29     {
30         ServerSocket ss=new ServerSocket(10006);
31         Socket s=ss.accept();
32         System.out.println(s.getInetAddress().getHostAddress()+"....connected");
33         BufferedReader bufIn=
34             new BufferedReader(new InputStreamReader(s.getInputStream()));
35         PrintWriter out=new PrintWriter(new FileWriter("server.txt"),true);
36         String line=null;
37         while((line=bufIn.readLine())!=null)
38         {
39             out.println(line);
40 
41         }
42         PrintWriter pw=new PrintWriter(s.getOutputStream(),true);
43         pw.println("上傳成功!");
44 
45         s.close();
46         ss.close();
47         out.close();
48     
49     }
50 }
View Code

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 今天測試密鑰登入linux系統時 出現如下問題:root@compute01:~#ssh [email protected] -p 80 -i alickicxxxxxxx.key@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ....
  • 一.概述 System V信號量與System V消息隊列不同。它不是用來在進程間傳遞數據。它主要是來同步進程的動作。1.一個信號量是一個由內核維護的整數。其值被限製為大於或等於0。2.可以在信號量上加上或減去一個數量。3.當一個減操作把信號量減到小於...
  • 那麼, 今天的任務呢是在linux上安裝 .net 5 運行時 ok, 先決條件: Ubuntu 14 (openSuse 42和Ubuntu 15都失敗了... 別問我為什麼) 開始安裝: "官方文檔" 安裝 .NET Version Manager (DNVM) 安裝 .NE...
  • [前言]在張銀奎老師的《軟體調試》一書中,詳細地講解了使用記憶體的分支記錄機制——BTS機制(5.3),並且給出了示例工具CpuWhere及其源代碼。但實際運行(VMware XP_SP3 單核)並沒有體現應有的效果,無法讀取到分支記錄。查看了源代碼並沒有發現任何問題,與書中所講一致。既然軟體本身沒有...
  • 最近,有個項目突然接到總部的安全漏洞報告,查看後知道是XSS攻擊。問題描述: 在頁面上有個隱藏域: 當前頁面提交到Controller時,未對action屬性做任何處理,直接又回傳到頁面上 如果此時action被用戶惡意修改為:***""*** 此時當頁面刷新時將執行alert(1),雖然錯...
  • 在插件實例修改3增加一個聯繫人功能配置文件 1 2 3 4 5 6 7 8 9 10 11 12...
  • define的用法小結define的用法只是一種純粹的替換功能,巨集定義的替換是預處理器處理的替換。 一:簡單的巨集定義用法 格式:#define 標識符 替換內容 替換的內容可以是數字,字元,字元串,特殊字元和空格,後面是什麼內容就會替換成什麼內容。 例如: #define N 5 效...
  • 參考書籍:Head First Java1、假設某方法是別人寫在某個類裡面的2、而此時你根本就不知道這個方法是否有風險(比如伺服器出故障會使程式受到影響);3、那最好的方法應該就是,在調用這個類的方法時,加上可能發生異常的處理方案,未雨綢繆。關鍵字:try……catch,throws,throw,f...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...