中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java如何實現Socket通信之單線程服務

發布時間:2021-04-15 13:53:22 來源:億速云 閱讀:244 作者:小新 欄目:編程語言

這篇文章主要介紹了java如何實現Socket通信之單線程服務,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

前言

使用基于TCP 協議的雙向通信時,網絡中的兩個應用程序之間必須首先建立一個連接,這兩個程序通過一個雙向的通信連接實現數據的交換,這個連接的一端稱為一個socket。

建立網絡通信連接至少要一對端口號(socket)。socket本質是編程接口(API),對TCP/IP的封裝,TCP/IP也要提供可供程序員做網絡開發所用的接口,這就是Socket編程接口;HTTP是轎車,提供了封裝或者顯示數據的具體形式;Socket是發動機,提供了網絡通信的能力。

Socket的英文原義是“孔”或“插座”。作為BSD UNIX的進程通信機制,取后一種意思。通常也稱作"套接字",用于描述IP地址和端口,是一個通信鏈的句柄,可以用來實現不同虛擬機或不同計算機之間的通信。在Internet上的主機一般運行了多個服務軟件,同時提供幾種服務。每種服務都打開一個Socket,并綁定到一個端口上,不同的端口對應于不同的服務。Socket正如其英文原意那樣,像一個多孔插座。一臺主機猶如布滿各種插座的房間,每個插座有一個編號,有的插座提供220伏交流電, 有的提供110伏交流電,有的則提供有線電視節目。 客戶軟件將插頭插到不同編號的插座,就可以得到不同的服務。

使用 socket 的通信模式

java.net 程序包將基于TCP 通信的socket 封裝為兩個類:類Socket 表達了一個用于建立TCP 連接的socket,該socket 既可由客戶程序使用,也可由服務程序

使用;類ServerSocket 則是一個服務端專門監聽客戶程序連接請求的socket 的抽象,僅在服務程序中使用。

Socket通信過程

java如何實現Socket通信之單線程服務

服務器端:

                 ① 創建ServerSocket對象,綁定監聽端口

                 ② 通過accept()方法監聽客戶端請求

                 ③ 連接建立后,通過輸入流讀取客戶端發送的請求信息

                 ④ 通過輸出流向客戶端發送響應信息

                 ⑤ 關閉連接

客戶端:
                 ① 創建Socket對象,指明需要連接的服務器的地址和端口號

                 ② 連接建立后,通過輸出流想服務器端發送請求信息

                 ③ 通過輸入流獲取服務器響應的信息

                 ④ 關閉連接

單線程服務程序代碼

服務端:

import java.net.*;
import java.io.*;
 
public class EchoServer {
  public static void main(String[] args)throws IOException {
    if (args.length != 1) {
      System.out.println("用法:EchoServer <端口號>");
      return ;
    }
 
    // 監聽客戶程序的連接請求
    ServerSocket listenSocket = new ServerSocket(Integer.parseInt(args[0]));
    System.out.println("服務程序正在監聽端口" + args[0]);
    Socket socket = listenSocket.accept();
    // 從與客戶程序的新建連接獲取輸入流和輸出流
    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    BufferedReader in = new BufferedReader(new InputStreamReader
      (socket.getInputStream()));
    // 從客戶端讀取數據,并寫回數據的加工結果
    String message;
    while ((message = in.readLine()) != null) {
      System.out.println("收到請求:" + message);
      out.println(message.toUpperCase());
    }
 
    // 關閉連接
    out.close();
    in.close();
    socket.close();
    listenSocket.close();
  }
}

客戶端:

import java.net.*;
import java.io.*;
 
public class EchoClient {
  public static void main(String[] args)throws Exception {
    if (args.length != 2) {
      System.out.println("用法:EchoClient <主機名> <端口號>");
      return ;
    }
 
    // 建立連接并打開相關聯的輸入流和輸出流
    Socket socket = new Socket(args[0], Integer.parseInt(args[1]));
    System.out.println("當前socket信息:" + socket);
    PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
    BufferedReader in = new BufferedReader(new InputStreamReader
      (socket.getInputStream()));
 
    // 將控制臺輸入的字符串發送給服務端,并顯示從服務端獲取的處理結果
    BufferedReader stdIn = new BufferedReader(new InputStreamReader
      (System.in));
    String userInput;
    while ((userInput = stdIn.readLine()) != null) {
      out.println(userInput);
      System.out.println("返回:" + in.readLine());
    }
    stdIn.close();
    // 關閉連接
    out.close();
    in.close();
    socket.close();
  }
}

運行結果示例(基于windows)

java如何實現Socket通信之單線程服務

感謝你能夠認真閱讀完這篇文章,希望小編分享的“java如何實現Socket通信之單線程服務”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

芮城县| 田林县| 北川| 共和县| 西平县| 霍邱县| 任丘市| 隆回县| 天津市| 景德镇市| 专栏| 齐齐哈尔市| 湟中县| 霍州市| 广昌县| 长宁县| 合水县| 呼伦贝尔市| 封丘县| 昌都县| 凤庆县| 贺兰县| 手游| 油尖旺区| 喀什市| 庄浪县| 娄底市| 七台河市| 朝阳市| 彰化市| 松潘县| 德安县| 永修县| 杂多县| 远安县| 教育| 兖州市| 泰顺县| 京山县| 宣威市| 泽州县|