最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java之ServerSocket使用及說明

 更新時間:2025年11月24日 15:04:54   作者:Java楊永杰  
本文介紹了Java中ServerSocket類的使用方法,包括創(chuàng)建ServerSocket對象、綁定端口、監(jiān)聽連接請求、接受連接、關閉連接等常用方法,還通過兩個案例分別展示了如何使用ServerSocket實現TCP和UDP通信

前言

Java中的ServerSocket是一種用于建立服務器端socket的類。它允許程序在指定端口上監(jiān)聽客戶端的連接請求,并在連接成功后與客戶端進行數據交互。

ServerSocket類提供了一些方法,用于控制服務器端socket的行為,如綁定端口、監(jiān)聽連接請求、接受連接、關閉連接等。

常用方法

以下是ServerSocket類的一些常用方法:

  • ServerSocket(int port): 構造器,用于創(chuàng)建一個指定端口的ServerSocket對象。
  • void bind(SocketAddress endpoint):將ServerSocket綁定到指定的端口,可以是本地或遠程端口。
  • Socket accept():監(jiān)聽并接受客戶端的連接請求,返回一個與客戶端建立連接后的Socket對象。
  • void close():關閉ServerSocket以及與之關聯(lián)的所有Socket連接。

使用

ServerSocket的使用步驟如下:

  • 創(chuàng)建ServerSocket對象,并指定監(jiān)聽的端口。
  • 調用bind()方法將ServerSocket綁定到指定端口。
  • 調用accept()方法監(jiān)聽并接受客戶端的連接請求。
  • 使用返回的Socket對象與客戶端進行數據交互。
  • 使用完畢后,調用close()方法關閉ServerSocket以及與之關聯(lián)的所有Socket連接。

ServerSocket的常見應用場景包括:建立Web服務器、FTP服務器、郵件服務器等需要監(jiān)聽客戶端連接請求的網絡服務。

案例

1.實現TCP

要使用ServerSocket實現TCP連接,可以按照以下步驟進行操作:

  • 創(chuàng)建ServerSocket對象,并指定要監(jiān)聽的端口號。
ServerSocket serverSocket = new ServerSocket(port);
  • 調用accept()方法監(jiān)聽并接受客戶端的連接請求。accept()方法會阻塞程序直到有客戶端連接成功,并返回與客戶端建立連接后的Socket對象。
Socket socket = serverSocket.accept();
  • 使用返回的Socket對象與客戶端進行數據交互。可以使用InputStream和OutputStream來接收和發(fā)送數據。
// 從客戶端讀取數據
InputStream inputStream = socket.getInputStream();
DataInputStream dataInputStream = new DataInputStream(inputStream);
String clientMessage = dataInputStream.readUTF();

// 向客戶端發(fā)送數據
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF("Hello Client!");
  • 使用完畢后,調用close()方法關閉ServerSocket以及與之關聯(lián)的所有Socket連接。
serverSocket.close();

完整的示例代碼如下:

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

public class TCPServer {

    public static void main(String[] args) {
        int port = 1234;

        try {
            // 創(chuàng)建ServerSocket對象
            ServerSocket serverSocket = new ServerSocket(port);

            System.out.println("Server started and listening on port " + port);

            // 監(jiān)聽并接受客戶端的連接請求
            Socket socket = serverSocket.accept();

            System.out.println("Client connected: " + socket.getInetAddress().getHostAddress());

            // 從客戶端讀取數據
            InputStream inputStream = socket.getInputStream();
            DataInputStream dataInputStream = new DataInputStream(inputStream);
            String clientMessage = dataInputStream.readUTF();
            System.out.println("Received message from client: " + clientMessage);

            // 向客戶端發(fā)送數據
            OutputStream outputStream = socket.getOutputStream();
            DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
            dataOutputStream.writeUTF("Hello Client!");

            // 關閉連接
            socket.close();
            serverSocket.close();

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

這個示例代碼創(chuàng)建了一個簡單的TCP服務器,監(jiān)聽在端口1234上。當有客戶端連接成功后,服務器會從客戶端接收一條消息,并向客戶端發(fā)送一條回復消息。完成后,服務器關閉連接。

要測試該示例代碼,可以編寫一個TCP客戶端,使用相同的端口號連接到服務器,發(fā)送消息并接收回復。

2.實現UDP

要使用ServerSocket實現UDP連接,可以按照以下步驟操作:

  • 創(chuàng)建DatagramSocket對象,并指定要監(jiān)聽的端口號。
DatagramSocket serverSocket = new DatagramSocket(port);
  • 創(chuàng)建一個字節(jié)數組用于接收數據。
byte[] receiveData = new byte[1024];
  • 創(chuàng)建一個DatagramPacket對象,用于接收從客戶端發(fā)送過來的數據。
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
  • 使用receive()方法從客戶端接收數據。該方法會阻塞程序直到接收到數據。
serverSocket.receive(receivePacket);
  • 使用DatagramPacket對象獲取接收到的數據,并進行相應處理。
String clientMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
  • 可以使用DatagramPacket對象獲取客戶端的IP地址和端口號。
InetAddress clientIPAddress = receivePacket.getAddress();
int clientPort = receivePacket.getPort();
  • 可以使用DatagramSocket對象向客戶端發(fā)送數據。首先創(chuàng)建一個字節(jié)數組和一個DatagramPacket對象。
String serverMessage = "Hello Client!";
byte[] sendData = serverMessage.getBytes();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientIPAddress, clientPort);
  • 使用send()方法將數據發(fā)送給客戶端。
serverSocket.send(sendPacket);
  • 使用完畢后,調用close()方法關閉DatagramSocket。
serverSocket.close();

完整的示例代碼如下:

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPServer {

    public static void main(String[] args) {
        int port = 1234;

        try {
            // 創(chuàng)建DatagramSocket對象
            DatagramSocket serverSocket = new DatagramSocket(port);

            System.out.println("Server started and listening on port " + port);

            // 創(chuàng)建一個字節(jié)數組用于接收數據
            byte[] receiveData = new byte[1024];

            // 創(chuàng)建一個DatagramPacket對象,用于接收數據
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

            // 接收從客戶端發(fā)送的數據
            serverSocket.receive(receivePacket);

            // 獲取接收到的數據和客戶端的信息
            String clientMessage = new String(receivePacket.getData(), 0, receivePacket.getLength());
            InetAddress clientIPAddress = receivePacket.getAddress();
            int clientPort = receivePacket.getPort();

            System.out.println("Received message from client: " + clientMessage);

            // 向客戶端發(fā)送數據
            String serverMessage = "Hello Client!";
            byte[] sendData = serverMessage.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientIPAddress, clientPort);
            serverSocket.send(sendPacket);

            // 關閉連接
            serverSocket.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

這個示例代碼創(chuàng)建了一個簡單的UDP服務器,監(jiān)聽在端口1234上。當有客戶端發(fā)送數據時,服務器會接收并打印出來,然后向客戶端發(fā)送一條回復消息。完成后,服務器關閉連接。

要測試該示例代碼,可以編寫一個UDP客戶端,使用相同的端口號連接到服務器,發(fā)送數據并接收回復。

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • SpringData JPA審計功能(@CreatedDate與@LastModifiedDate)實現

    SpringData JPA審計功能(@CreatedDate與@LastModifiedDate)實現

    Spring Data JPA的審計功能提供了一種強大而靈活的機制,用于自動跟蹤實體的創(chuàng)建和修改信息,通過使用@CreatedDate和@LastModifiedDate注解,開發(fā)者可以輕松地實現時間審計,感興趣的可以了解一下
    2025-04-04
  • SpringAop @Aspect織入不生效,不執(zhí)行前置增強織入@Before方式

    SpringAop @Aspect織入不生效,不執(zhí)行前置增強織入@Before方式

    這篇文章主要介紹了SpringAop @Aspect織入不生效,不執(zhí)行前置增強織入@Before方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • 替換jar包中的依賴jar實現方式

    替換jar包中的依賴jar實現方式

    在沒有源碼的情況下替換JAR包中的依賴包,可以通過以下步驟完成:備份原始JAR包,進入JAR包的BOOT-INF/lib目錄,刪除舊的依賴包并替換為新的依賴包,最后重新打包
    2025-12-12
  • SpringBoot整合Sa-Token實現登錄認證的示例代碼

    SpringBoot整合Sa-Token實現登錄認證的示例代碼

    本文主要介紹了SpringBoot整合Sa-Token實現登錄認證的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • SpringBoot統(tǒng)一數據返回的方法實現

    SpringBoot統(tǒng)一數據返回的方法實現

    在前后端交互過程中,為了便于數據處理,后端數據需要進行統(tǒng)一封裝返回給前端,這種做法不僅方便前后端溝通,降低了溝通成本,還有助于項目的統(tǒng)一維護和后端技術部門的規(guī)范制定,本文就來介紹一下
    2024-10-10
  • Java中ArrayList類的源碼解析

    Java中ArrayList類的源碼解析

    本文主要介紹了Java中ArrayList類的源碼解析,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-03-03
  • Java面試題沖刺第二十六天--實戰(zhàn)編程

    Java面試題沖刺第二十六天--實戰(zhàn)編程

    這篇文章主要為大家分享了最有價值的三道java實戰(zhàn)面試題,涵蓋內容全面,包括數據結構和算法相關的題目、經典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Tomcat處理請求的線程模型詳解

    Tomcat處理請求的線程模型詳解

    這篇文章主要為大家詳細介紹了Tomcat處理請求的線程模型,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 詳解Java線程池隊列中的延遲隊列DelayQueue

    詳解Java線程池隊列中的延遲隊列DelayQueue

    這篇文章主要為大家詳細介紹了Java線程池隊列中的延遲隊列DelayQueue的相關資料,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-12-12
  • SpringBoot項目集成MinIO全過程

    SpringBoot項目集成MinIO全過程

    這篇文章主要介紹了SpringBoot項目集成MinIO全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08

最新評論

临洮县| 通山县| 营口市| 陵水| 湖南省| 察雅县| 泊头市| 平舆县| 汶川县| 丰原市| 如皋市| 库伦旗| 沧源| 天全县| 南投市| 花莲市| 同心县| 当雄县| 丹巴县| 延津县| 天台县| 吴堡县| 年辖:市辖区| 元江| 建阳市| 安陆市| 东辽县| 横峰县| 水富县| 绩溪县| 会宁县| 龙岩市| 万安县| 内乡县| 新闻| 汤原县| 淮阳县| 广德县| 武宁县| 朝阳县| 磐石市|