JavaSE——TCP協議網路編程(一)

来源:http://www.cnblogs.com/linlin0/archive/2016/12/18/6194678.html
-Advertisement-
Play Games

實現客戶端與服務端的連接: 使用ServerSocket創建TCP服務端 ServerSocket :此類實現伺服器套接字。伺服器套接字請求通過網路傳入,基於該請求執行某些操作,然後可能向請求者返回結果。 詳細描述見:http://download.java.net/jdk/jdk-api-loca ...


實現客戶端與服務端的連接: 

  • 使用ServerSocket創建TCP服務端

  ServerSocket :此類實現伺服器套接字。伺服器套接字請求通過網路傳入,基於該請求執行某些操作,然後可能向請求者返回結果。

  詳細描述見:http://download.java.net/jdk/jdk-api-localizations/jdk-api-zh-cn/publish/1.6.0/html/zh_CN/api/index.html

  ServerSocket 類的構造方法:

ServerSocket()
          創建非綁定伺服器套接字。
ServerSocket(int port)
          創建綁定到特定埠的伺服器套接字。
ServerSocket(int port, int backlog)
          利用指定的 backlog 創建伺服器套接字並將其綁定到指定的本地埠號。
ServerSocket(int port, int backlog, InetAddress bindAddr)
          使用指定的埠、偵聽 backlog 和要綁定到的本地 IP 地址創建伺服器。

  ServerSocket 類的常用方法

 Socket accept()
          偵聽並接受到此套接字的連接。
 void bind(SocketAddress endpoint, int backlog)
          將 ServerSocket 綁定到特定地址(IP 地址和埠號)。
 void close()
          關閉此套接字。
 InetAddress getInetAddress()
          返回此伺服器套接字的本地地址。
 boolean isBound()
          返回 ServerSocket 的綁定狀態。
 boolean isClosed()
          返回 ServerSocket 的關閉狀態。

簡要代碼:

ServerSocket server = new ServerSocket( 有效埠號 );

Server client = server.accept(); // 在沒有接收到客戶端連接請求時, accept 屬於堵塞狀態,接收到後繼續                                                        //運行。

if(client!=null){

  System.out.println("有客戶端連接上來了");

}

 

  • 使用Socket創建TCP客戶端

  Socket 類:此類實現客戶端套接字(“套接字”).套接字是兩台機器間通信的端點。

  常用的構造方法:

  Socket()
          通過系統預設類型的 SocketImpl 創建未連接套接字
  Socket(InetAddress address, int port)
          創建一個流套接字並將其連接到指定 IP 地址的指定埠號。
  Socket(InetAddress address, int port, InetAddress localAddr, int localPort)
          創建一個套接字並將其連接到指定遠程地址上的指定遠程埠。
protected Socket(SocketImpl impl)
          使用用戶指定的 SocketImpl 創建一個未連接 Socket。
  Socket(String host, int port)
          創建一個流套接字並將其連接到指定主機上的指定埠號。
  Socket(String host, int port, InetAddress localAddr, int localPort)
          創建一個套接字並將其連接到指定遠程主機上的指定遠程埠。

 

常用的方法:

 void bind(SocketAddress bindpoint)
          將套接字綁定到本地地址。
 void close()
          關閉此套接字。
 void connect(SocketAddress endpoint)
          將此套接字連接到伺服器。

 簡要代碼:

Socket client = new Socket("127.0.0.0",9999);  服務端IP地址與埠號。

  查詢電腦的ip地址和埠號:

  打開命令提示符,輸入:
  ipconfig/all   (windows ip configuration 視窗操作系統ip配置)查看當前IP及電腦網路配置; 顯示當前電腦ip相關所有信息,包括ip地址、網卡(mac)地址。
  netstat -an ,查看當前所有連接埠; netstat(在內核中訪問網路及相關信息的程式)顯示網路連接、路由表和網路介面信息,可以讓用戶得知目前都有哪些網路連接正在運作。

package 網路編程;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class Server{
    public static void main(String[] args) {
        try {
            
            ServerSocket server = new ServerSocket(9657);
            Socket client = server.accept();
            if(client!=null){
                System.out.println("有客戶端連接上來了");
                server.close();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
package 網路編程;

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

public class Client {


    public static void main(String[] args) {
    
            
                try {
                    Socket client = new Socket("127.0.0.1",9657);
                    client.close();
                } catch (UnknownHostException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    }

}

output:有客戶端連接上來了。

此段服務端代碼存在問題,客戶端與服務端建立連接之後服務會自動關閉,不能繼續接受多個客戶端的請求。可以加上一個 while 迴圈,使服務端接受一個客戶端的請求後又回到 accept() 的接受狀態。

 


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

-Advertisement-
Play Games
更多相關文章
  • 今日問題: 請問主程式輸出結果是什麼?(點擊以下“【Java每日一題】20161219”查看20161216問題解析) 題目原發佈於公眾號、簡書:【Java每日一題】20161219,【Java每日一題】20161219 註:weknow團隊近期開通並認證了分答,歡迎大家收聽,有問題也歡迎到分答來咨 ...
  • 1、tomcat的訪問日誌AccessLogs定期或者定量刪除 a 開啟tomcat訪問日誌 編輯${catalina}/conf/server.xml文件.註:${catalina}是tomcat的安裝目錄 把以下的註釋(<!-- -->)去掉即可。 <!--<ValveclassName="or ...
  • 1.app.js 2.m_p包下package.json 3.index.js 入口模塊 ...
  • 來博客園的第一天。 大學畢業三年多了,感覺自己碌碌無為,不知道自己究竟想做什麼,就這樣渾渾噩噩過了三年多。 記得大三那年,為了準備大四的畢業設計,自學了好幾個月的Java EE。Java基礎、Java Web、資料庫……然後各種度娘,東拼西湊,終於把畢業設計做出來了,當時感覺還挺有成就感的。 畢業那 ...
  • Python實現簡單的猜數字游戲,具體如下: 隨機生成一個1-10之間的數字,讓用戶來猜,當猜錯時,會提示猜的數字是大還是小了,直到用戶猜對為止。 ...
  • 1.Node.js 文件系統 2.非同步和同步 讀取文件內容的函數有非同步的 fs.readFile() 和同步的 fs.readFileSync()。 ...
  • R是免費開源的軟體,具有強大的數據處理和繪圖等功能。下麵是R開發環境的搭建過程。 一、點擊網址 https://www.r-project.org/ ,進入“The R Project for Statistical Computing”界面。 二、點擊加粗字體的“download R”,進行“CR ...
  • 1.事件驅動程式綁定事件及事件的處理程式 我們可以通過程式觸發事件 2.實例 3.讓類都具有事件的功能 app.js Test.js ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...