JAVA網路編程TCP通信

来源:http://www.cnblogs.com/lm970585581/archive/2017/05/28/6916873.html
-Advertisement-
Play Games

Socket簡介: Socket稱為“套接字”,描述IP地址和埠。在Internet上的主機一般運行多個服務軟體,同時提供幾種服務,每種服務都打開一個Socket,並綁定在一個埠上,不同的埠對應於不同的服務。Socket和ServerSocket類位於java.net包中。ServerSock ...


Socket簡介:

Socket稱為“套接字”,描述IP地址和埠。在Internet上的主機一般運行多個服務軟體,同時提供幾種服務,每種服務都打開一個Socket,並綁定在一個埠上,不同的埠對應於不同的服務。Socket和ServerSocket類位於java.net包中。ServerSocket用於服務端,Socket是建立網路連接時使用的。連接成功時,應用程式兩端都會產生一個Socket實例,通過操作這個實例完成所需會話。

Socket常用方法:

-int getLocalPort() 獲取本地使用的埠號

-InetAddress getLocalAddress() 獲取套接字綁定的本地地址

-int getPort() 獲取遠端使用的埠號

-InetAddress.getInetAddress() 獲取套接字綁定的遠端地址

InetAddress常用方法:

-String getCanonicalHostName() 獲取此IP地址的完全限定功能變數名稱。

-String getHostAddress() 返回IP地址字元串

1 //獲取本地地址和埠號:
2   public void testSocket() throws Exception{
3       Socket socket=new Socket("localhost",8088);
4       InetAddress add=socket.getLocalAddress();
5       System.out.println(add.getCanonicalHostName());
6       System.out.println(add.getHostName());
7       System.out.println(add.getLocalPort());
8   }
1 //獲取遠端地址和埠號:
2     public static void testSocket() throws Exception{
3         Socket socket=new Socket("localhost",8088);
4         InetAddress inetAdd=socket.getInetAddress();
5         System.out.println(inetAdd.getCanonicalHostName());
6         System.out.println(inetAdd.getHostName());
7         System.out.println(socket.getLocalPort());
8     }

獲取網路輸入流和網路輸出流

通過Socket獲取輸入流與輸出流,主要使用一下兩個方法

-InputStream getInputStream() 用於返回此套接字的輸入流

-OutStream getOutputStream() 用於返回此套接字的輸出流

public static void testSocket() throws Exception {
        Socket socket = new Socket("localhost", 8088);
        OutputStream out = socket.getOutputStream();
        OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8");
        PrintWriter pw = new PrintWriter(osw, true);
        pw.println("輸出的內容");//發送內容
        InputStream in=socket.getInputStream();
        InputStreamReader isr=new InputStreamReader(in, "UTF-8");
        BufferedReader br=new BufferedReader(isr);
        br.readLine();//讀取接到的內容
 }

註意:當使用完Socket進行通訊完畢後,要關閉Socket以釋放系統資源

-void close() 關閉套接字,同時也代表關閉了獲取的輸入與輸出流。

服務端ServerSocket監聽

1 //創建ServerSocket並申請服務埠8088
2 ServerSocket server=new ServerSocket(8088);
3 /*方法會產生阻塞,直到某個Socket連接,並返回請求連接的Socket*/
4 Socket socket=server.accept();
5 ...

客戶端Socket連接

1 //參數1:服務端的IP地址,參數2:服務端的伺服器埠
2 //註意:創建Socket的同時就會發起連接,若連接失敗會拋出異常
3 Socket socket=new Socket("localhost",8088);
4 ....

C-S端通信模型

TCP與UDP的區別

TCP(Transmission Control Protocol,傳輸控制協議)是基於連接的協議,也就是說,在正式收發數據前,必須和對方建立可靠的連接。聊天工具使用TCP協議

UDP(User Data Protocol,用戶數據報協議)是與TCP相對應的協議。它是面向非連接的協議,它不與對方建立連接,而是直接就把數據包發送過去! 游戲多使用UDP協議


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

-Advertisement-
Play Games
更多相關文章
  • 最近需要做一個列印的功能,於是在網上找到了這麼一個方法。 以上就是全部代碼了,調用就很簡單了,方法如下: ...
  • 在基於“less rope to hang yourself with”思想下,.NET 框架沒有給開發提供很多太多的配置選項。但在大多數情況下,GC會跟你的硬體配置,及可用資源以及程式自己的行為做調整。當然也提供一些高級的配置使用,但這取決於你程式的類型。 ...
  • OS模塊 提供對操作系統進行調用的介面 (1)os.getcwd() 獲取當前工作目錄,即當前python腳本工作的目錄路徑 >>> os.getcwd() 獲取Python當前腳本工作的目錄路徑 '/home/zhuzhu' (2)os.chdir("dirname") 改變當前腳本工作目錄;相當 ...
  • random 我們經常看到網站的隨機驗證碼,這些都是由隨機數生成的,因此我們需要瞭解一下隨機數的模塊。如何生成隨機數。 random 生成隨機數 random.random() 生成0-1之間的小數 >>> import random >>> random.random() 0.7386445925 ...
  • time模塊 time模塊提供各種操作時間的函數 #1、時間戳 1970年1月1日之後的秒 #2、元組 包含了:年、日、星期等... time.struct_time #3、格式化的字元串 2014-11-11 11:11 (1)asctime(p_tuple=None) def asctime(p ...
  • eclipse啟動時彈出Failed to create the Java Virtual Machine 一、現象 今天裝eclipse的時候出現Failed to create the Java Virtual Machine 的錯誤。 錯誤圖片如下: 二、出錯原因 把錯誤提示翻譯一下,就是“無 ...
  • Ctrl+1 快捷修複 Ctrl+D 快捷刪除 shift+enter 跳過本行開始下一行 Ctrl+F11 快速運行 Alt+↑/↓ 快速移動行 Ctrl+Alt+↑/↓ 快速複製行 Ctrl+M 視窗最大化 Alt+/ 自動補全 代碼區域右鍵 選中preferences →Java →edito ...
  • 國際化英文單詞為:Internationalization,又稱I18N,I為因為單詞的第一個字母,18為這個單詞的長度,而N代表這個單詞的最後一個字母。國際化又稱本地化(Localization,L10N)。 Java國際化主要通過如下3個類完成 java.util.ResourceBundle:... ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...