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

Java之ServerSocket使用及說明

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

前言

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

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

常用方法

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

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

使用

ServerSocket的使用步驟如下:

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

ServerSocket的常見應(yīng)用場(chǎng)景包括:建立Web服務(wù)器、FTP服務(wù)器、郵件服務(wù)器等需要監(jiān)聽客戶端連接請(qǐng)求的網(wǎng)絡(luò)服務(wù)。

案例

1.實(shí)現(xiàn)TCP

要使用ServerSocket實(shí)現(xiàn)TCP連接,可以按照以下步驟進(jìn)行操作:

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

// 向客戶端發(fā)送數(shù)據(jù)
OutputStream outputStream = socket.getOutputStream();
DataOutputStream dataOutputStream = new DataOutputStream(outputStream);
dataOutputStream.writeUTF("Hello Client!");
  • 使用完畢后,調(diào)用close()方法關(guān)閉ServerSocket以及與之關(guān)聯(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對(duì)象
            ServerSocket serverSocket = new ServerSocket(port);

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

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

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

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

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

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

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

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

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

2.實(shí)現(xiàn)UDP

要使用ServerSocket實(shí)現(xiàn)UDP連接,可以按照以下步驟操作:

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

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

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

            // 創(chuàng)建一個(gè)DatagramPacket對(duì)象,用于接收數(shù)據(jù)
            DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);

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

            // 獲取接收到的數(shù)據(jù)和客戶端的信息
            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ā)送數(shù)據(jù)
            String serverMessage = "Hello Client!";
            byte[] sendData = serverMessage.getBytes();
            DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientIPAddress, clientPort);
            serverSocket.send(sendPacket);

            // 關(guān)閉連接
            serverSocket.close();

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

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

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

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringData JPA審計(jì)功能(@CreatedDate與@LastModifiedDate)實(shí)現(xiàn)

    SpringData JPA審計(jì)功能(@CreatedDate與@LastModifiedDate)實(shí)現(xiàn)

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

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

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

    替換jar包中的依賴jar實(shí)現(xiàn)方式

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

    SpringBoot整合Sa-Token實(shí)現(xiàn)登錄認(rèn)證的示例代碼

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

    SpringBoot統(tǒng)一數(shù)據(jù)返回的方法實(shí)現(xiàn)

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

    Java中ArrayList類的源碼解析

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

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

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

    Tomcat處理請(qǐng)求的線程模型詳解

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

    詳解Java線程池隊(duì)列中的延遲隊(duì)列DelayQueue

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

    SpringBoot項(xiàng)目集成MinIO全過程

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

最新評(píng)論

天等县| 河池市| 鄂尔多斯市| 西藏| 合水县| 尚志市| 曲水县| 宝应县| 西乡县| 江源县| 西平县| 纳雍县| 腾冲县| 谷城县| 武平县| 郯城县| 济宁市| 大邑县| 高台县| 拜城县| 河间市| 辽宁省| 台湾省| 邻水| 兰溪市| 清新县| 公安县| 日喀则市| 浏阳市| 鄂州市| 友谊县| 陕西省| 德令哈市| 哈尔滨市| 昭觉县| 建平县| 长治县| 石景山区| 新密市| 绩溪县| 磴口县|