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

Java通過(guò)ServerSocket與Socket實(shí)現(xiàn)通信過(guò)程

 更新時(shí)間:2025年11月24日 15:03:01   作者:氷泠  
本文介紹了Java中的ServerSocket和Socket類,詳細(xì)講解了它們的構(gòu)造方法和使用場(chǎng)景,并通過(guò)一個(gè)簡(jiǎn)單的通信示例展示了如何實(shí)現(xiàn)服務(wù)器和客戶端之間的通信,此外,還介紹了如何為Socket設(shè)置超時(shí)時(shí)間

1 ServerSocket

ServetSocket是用來(lái)監(jiān)聽(tīng)客戶端Socket連接的類,如果沒(méi)有連接會(huì)一直處于等待狀態(tài)。

ServetSocket有三個(gè)構(gòu)造方法:

  • ServerSocket(int port):這個(gè)使用指定的端口去創(chuàng)建ServerSocket,IP地址使用默認(rèn)的本地IP地址
  • ServetSocket(int port,int backlog):除了端口外,還有一個(gè)用來(lái)改變隊(duì)列長(zhǎng)度參數(shù)的backlog,指定當(dāng)服務(wù)器繁忙時(shí),可以與之保持連接請(qǐng)求的客戶端數(shù)量,默認(rèn)為50
  • ServetSocket(int port,int backlog,InetAddress ip):這個(gè)使用指定的端口、backlog、地址去創(chuàng)建ServetSocket

需要注意一下InetAddress沒(méi)有構(gòu)造方法,只有兩個(gè)靜態(tài)方法獲取InetAddress對(duì)象,分別是:

  • getByName(String hostName)
  • getByAddress(byte[] address)

2 Socket

Socket一般用來(lái)連接到服務(wù)器,程序通過(guò)Socket發(fā)出網(wǎng)絡(luò)請(qǐng)求或應(yīng)答網(wǎng)絡(luò)請(qǐng)求。

Socket有四個(gè)構(gòu)造方法:

  • Socket(InetAddress address,int port):使用指定IP與指定端口構(gòu)造Socket,默認(rèn)使用本地ip,端口則動(dòng)態(tài)分配
  • Socket(String address,int port):使用String表示IP
  • Socket(InetAddress address,int port,InetAddress localAddr,int localPort):創(chuàng)建指定了遠(yuǎn)程IP、遠(yuǎn)程端口、本地IP、本地端口的Socket
  • Socket(String address,int port,InetAddress localAddr,int localPort):使用String表示遠(yuǎn)程IP,用InetAddress表示本地IP

了解ServerSocketSocket后可以編寫實(shí)現(xiàn)簡(jiǎn)單的通信了。

3 服務(wù)器端

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

public class Server
{
    public static void main(String[] args) throws IOException
    {
        ServerSocket serverSocket = new ServerSocket(12345);//這個(gè)端口自己隨意,建議1024以上未使用的端口.
        while(true)
        {
            Socket socket = serverSocket.accept();//一直等待來(lái)自客戶端的請(qǐng)求.
            PrintStream printStream = new PrintStream(socket.getOutputStream());//創(chuàng)建輸出流
            printStream.println("Server message.");
            printStream.close();
            socket.close();
        }
    }
}

ServetSocketaccept()方法,沒(méi)有參數(shù),返回一個(gè)Socket,如果接收到客戶端的一個(gè)Socket,則返回,否則一直處于等待狀態(tài),線程也被阻塞。

4 客戶端

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.Socket;

public class Client
{
    public static void main(String[] args) throws IOException
    {
        Socket socket = new Socket("127.0.0.1", 12345);
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        System.out.println("This message comes from server:"+bufferedReader.readLine());
        bufferedReader.close();
        socket.close();
    }
}

代碼邏輯就是創(chuàng)建一個(gè)本地地址,端口為12345的Socket,然后服務(wù)器的socket.accept()就會(huì)接收到這個(gè)Socket,并創(chuàng)建輸出流輸出相應(yīng)信息,然后客戶端從Socket獲取輸入流對(duì)來(lái)自服務(wù)器的信息進(jìn)行讀取。

5 運(yùn)行結(jié)果

先運(yùn)行服務(wù)器端的代碼:

服務(wù)器端這邊因?yàn)?code>accept()方法會(huì)一直阻塞直到客戶端發(fā)送請(qǐng)求。

客戶端這邊一運(yùn)行就收到了來(lái)自服務(wù)器端的信息。

6 設(shè)置超時(shí)

可以為Socket設(shè)置超時(shí)設(shè)置,當(dāng)Socket超過(guò)這個(gè)時(shí)間沒(méi)有連接上時(shí)系統(tǒng)會(huì)認(rèn)為連接失?。?/p>

Socket socket = new Socket("127.0.0.1",12345);
socket.setToTimeout(10000);//單位:ms,在這里是10s

但是未連接上之前無(wú)法創(chuàng)建Socket對(duì)象,并且Socket沒(méi)有提供指定超時(shí)的構(gòu)造方法,因此常見(jiàn)的做法是先創(chuàng)建一個(gè)無(wú)連接的Socket,再調(diào)用connect()連接:

Socket socket = new Socket();
socket.connect(new InetSocketAddress("127.0.0.1",12345),12345);

connect()方法其實(shí)有兩個(gè)重載方法:

  • void connect(SocketAddress endpoint):官方文檔沒(méi)有提及超時(shí)之類的,就是直接連接
  • void connect(SocketAddress endpoint,int timeout)timeout指定的超時(shí)時(shí)間,單位為ms,設(shè)置為0則為無(wú)限期等待

總結(jié)

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

相關(guān)文章

  • Java中對(duì)象快速?gòu)?fù)制的幾種方式詳解

    Java中對(duì)象快速?gòu)?fù)制的幾種方式詳解

    這篇文章主要介紹了Java中對(duì)象快速?gòu)?fù)制的幾種方式詳解,對(duì)象的克隆是指創(chuàng)建一個(gè)新的對(duì)象,且新的對(duì)象的狀態(tài)與原始對(duì)象的狀態(tài)相同,當(dāng)對(duì)克隆的新對(duì)象進(jìn)行修改時(shí),不會(huì)影響原始對(duì)象的狀態(tài),需要的朋友可以參考下
    2023-08-08
  • 一文詳解Java中的AuthRequest類(附Demo)

    一文詳解Java中的AuthRequest類(附Demo)

    公共接口,定義了對(duì)第三方平臺(tái)進(jìn)行授權(quán)、登錄、撤銷授權(quán)和刷新 token 的操作,本文將詳細(xì)分析Java中的AuthRequest類(附Demo),文中通過(guò)代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2024-04-04
  • Spring整合Mybatis實(shí)操分享

    Spring整合Mybatis實(shí)操分享

    這篇文章主要介紹了Spring整合Mybatis實(shí)操分享,文章首先通過(guò)介紹Mybatis的工作原理展開(kāi)Spring整合Mybatis的詳細(xì)內(nèi)容,需要的小伙伴可以參考一下
    2022-04-04
  • 手把手教你如何設(shè)計(jì)一套Java項(xiàng)目的Skill體系

    手把手教你如何設(shè)計(jì)一套Java項(xiàng)目的Skill體系

    Skill是一套模塊化的可復(fù)用能力包,其核心價(jià)值在于將特定任務(wù)的專業(yè)流程、可執(zhí)行邏輯與資源模板進(jìn)行標(biāo)準(zhǔn)化封裝,這篇文章主要介紹了如何設(shè)計(jì)一套Java項(xiàng)目Skill體系的相關(guān)資料,需要的朋友可以參考下
    2026-05-05
  • Mybatis各種查詢接口使用詳解

    Mybatis各種查詢接口使用詳解

    這篇文章主要介紹了Mybatis各種查詢接口使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-11-11
  • SpringBoot的@Scheduled和@Schedules區(qū)別小結(jié)

    SpringBoot的@Scheduled和@Schedules區(qū)別小結(jié)

    本文主要介紹了SpringBoot的@Scheduled和@Schedules區(qū)別小結(jié),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-01-01
  • 詳解java 中泛型中的類型擦除和橋方法

    詳解java 中泛型中的類型擦除和橋方法

    這篇文章主要介紹了詳解java 中泛型中的類型擦除和橋方法的相關(guān)資料,需要的朋友可以參考下
    2017-06-06
  • Java應(yīng)用服務(wù)器之tomcat部署的詳細(xì)教程

    Java應(yīng)用服務(wù)器之tomcat部署的詳細(xì)教程

    這篇文章主要介紹了Java應(yīng)用服務(wù)器之tomcat部署,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot接口惡意刷新和暴力請(qǐng)求的解決方法

    SpringBoot接口惡意刷新和暴力請(qǐng)求的解決方法

    在實(shí)際項(xiàng)目使用中,必須要考慮服務(wù)的安全性,當(dāng)服務(wù)部署到互聯(lián)網(wǎng)以后,就要考慮服務(wù)被惡意請(qǐng)求和暴力攻擊的情況,所以本文給大家介紹了SpringBoot接口惡意刷新和暴力請(qǐng)求的解決方法,需要的朋友可以參考下
    2024-11-11
  • Java?Zip壓縮之簡(jiǎn)化文件和文件夾的壓縮操作

    Java?Zip壓縮之簡(jiǎn)化文件和文件夾的壓縮操作

    這篇文章主要給大家介紹了關(guān)于Java?Zip壓縮之簡(jiǎn)化文件和文件夾的壓縮操作,Zip壓縮是一種常見(jiàn)的文件壓縮格式,它將多個(gè)文件和文件夾打包成一個(gè)以.zip為后綴的壓縮包,需要的朋友可以參考下
    2023-10-10

最新評(píng)論

肃北| 隆子县| 泰兴市| 泰顺县| 六盘水市| 新巴尔虎左旗| 永寿县| 伊春市| 保靖县| 永春县| 翁源县| 赞皇县| 涞源县| 虞城县| 永善县| 扶绥县| 佳木斯市| 仙桃市| 敦煌市| 沂南县| 资阳市| 绿春县| 韩城市| 凤凰县| 新泰市| 靖江市| 莆田市| 浦江县| 阿尔山市| 昌吉市| 图木舒克市| 山东省| 星座| 鹤峰县| 宜丰县| 曲阳县| 汝城县| 金门县| 拜城县| 孝义市| 龙游县|