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

通過Java創(chuàng)建Socket連接到服務(wù)器方式

 更新時間:2022年11月09日 15:43:29   作者:Jeffrey_oWang  
這篇文章主要介紹了通過Java創(chuàng)建Socket連接到服務(wù)器方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

1)連接到服務(wù)器

一、使用telnet

telnet 是windows上基于網(wǎng)絡(luò)編程的調(diào)試工具,windows 可以在控制面版->程序->打開/關(guān)閉Windows特性,然后選擇Telnet 客戶端來開啟windows 上telnet

可以通過兩個基本的實驗來認識telnet

輸入:

telnet time-a.nist.gov 13

得到:

image-20211013155434367

這里通過telnet 命令來連接遠程服務(wù)器,這里連接的是國家標準和技術(shù)研究所所運維的,使用這個命令后會建立和服務(wù)13端口的會話,而對應(yīng)的url 也會轉(zhuǎn)換成ip地址129.6.15.28,隨后talent 軟件就會發(fā)送一個連接請求給地址,請求一個到端口13的連接,一旦建立連接,遍會發(fā)送回一行數(shù)據(jù)然后關(guān)閉這個連接,而一般的客戶端和服務(wù)器之間往往會進行更多的會話。

輸入:

telnet horstmann.com 80

返回:

因為這里是訪問外網(wǎng)的原因可能遲遲沒有給我消息,但是其實我是可以發(fā)送一個HTTP 的報文,向這個服務(wù)器提交請求

GET / HTTP/1.1
Host:horstmann.com
blank line

這樣的GET請求服務(wù)器會返回我一個HTML 的頁面代碼

image-20211013160451201

image-20211013160512059

二、Java連接服務(wù)器

public class Test1 {
    public static void main(String[] args) {
        /*創(chuàng)建一個指定地址和端口的套接字,如果創(chuàng)建失敗會拋出一個UnknownHostException*/
        try (Socket s = new Socket("time-a.nist.gov",13);
             Scanner in = new Scanner(s.getInputStream(),"utf-8")
             ){
            while (in.hasNextLine()){
                String line = in.nextLine();
                System.out.println(line);
            }
        }catch (IOException e) {
            /*如果存在host 不存在之外的異常會拋出一個IOException 異常
            * UnknownHostException是這個異常的子異常
            * */
            e.printStackTrace();
        }
    }
}

套接字一旦創(chuàng)建成功就會建立與服務(wù)器對應(yīng)的連接,java.net.Socket 類中的getInputStream 方法就會返回一個InputStream 對象,該對象可以像任何一個流對象一樣去使用,相應(yīng)的也可以把其中的信息輸出在控制臺。

image-20211013161701001

Socket 類非常的易用,因為Java庫隱藏了建立網(wǎng)絡(luò)連接和通過連接發(fā)送數(shù)據(jù)的復雜過程,實際上,java.net 包提供的編程接口與操作文件時使用的接口基本相同。

java 支持傳輸層的TCP協(xié)議,也支持UDP協(xié)議。

解決超時

1、第一種超時是連接建立成功之后,在有數(shù)據(jù)可供訪問之前,讀操作會一直阻塞下去

Socket s = new Socket(...);
s.setTimeout(10000);

通過socket.setTimeOut方法可以設(shè)置套接字的超時時間,如果超過這個時間就會拋出SocketTimeoutException 異常,如果此時讀操作和寫操作在沒有完成前就超時,可以通過捕獲這個超時異常做出反應(yīng)。

2、通過Socket 的構(gòu)造器可以建立與服務(wù)器的連接,但是如果一直無法建立連接,就會一直阻塞下去,直到建立了連接。

可以通過:

Socket s =new Socket();
s.connect(new InetSocketAddress(host,port),timeout)

設(shè)置超時時間來處理一直無法連接上的問題。

三、因特網(wǎng)地址

就是通過域名來獲取IP地址,一般的IP的地址是4字節(jié)的,而IPV6是16字節(jié)的,這時就可以通過**InetAddress類來實現(xiàn)**

只要主機支持IPV6格式的因特網(wǎng)地址,java.net 包也會支持它

獲取指定域名的IP地址:

public class Test1 {
    public static void main(String[] args) throws UnknownHostException {
        String host = "www.baidu.com";
        /*InetAddress address = InetAddress.getByAddress(host);*/
        /*
        一般的域名只會對應(yīng)一個一個IP地址
        而一些訪問量比較大的域名會對應(yīng)多個IP地址,從而實現(xiàn)負載均衡
        可以通過上面的方法獲取一個IP地址
        也可以通過下面的方法獲取一個域名對應(yīng)的多個IP地址
         */
        /*InetAddress 的toString方法會會返回一個字符串類型,進而打印會輸出對應(yīng)的ip地址*/
        InetAddress[] addresses = InetAddress.getAllByName(host);
        for (InetAddress address : addresses){
            System.out.println(address);
        }
    }
}

image-20211013165714501

image-20211013165834153

image-20211013165848158

如果想獲取本地的IP地址可以通過:

    public static void main(String[] args) throws UnknownHostException {
        InetAddress address = InetAddress.getLocalHost();
        System.out.println(address);
    }

image-20211013170019949

前面輸出的是主機名而后面輸出的是主機的IP地址

image-20211013170056989

四、用到的API

  • java.netl.Sokcet 類
Socket(String host,int port)

創(chuàng)建一個套接字,指定主機和端口

Socket

創(chuàng)建一個為連接的套接字

InputStream getInputStream()
OutputStream getOutputStream()

獲取從套接字中讀取數(shù)據(jù)的流

void connect(SocketAddress address)

將套接字連接到指定的地址

void connect(SocketAddress address,int timeout)

連接到指定地址,如果給定時間內(nèi)沒有響應(yīng),則返回

void setTimeout(int timeout)

設(shè)置套接字上的讀請求的阻塞時間,超出給定時間拋出InterruptedIOException

boolean isConnected()

如果該套接字被連接,則返回true

boolean isClosed()

如果該套接字被關(guān)閉返回False

  • java.net.InetAddress類
statci InetAddress getByName(String host)
statci InetAddress[] getAllByName(String host)

給定主機名一個InetAddress 對象,或者一個數(shù)組

static InetAddress getLocalHost()

為本機創(chuàng)建一個InetAddress 對象

byte[] getAddress()

返回一個包含數(shù)字行地址的字節(jié)數(shù)組

IP 地址的字節(jié)數(shù)組表示

String getHostAddress()

返回值一個十進制組成的字符串,各數(shù)字用. 隔開

129.6.15.28

String getHostName()

返回主機名

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

相關(guān)文章

  • Java?GUI實現(xiàn)學生成績管理系統(tǒng)

    Java?GUI實現(xiàn)學生成績管理系統(tǒng)

    這篇文章主要為大家詳細介紹了Java?GUI實現(xiàn)學生成績管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • iReport生成pdf打印的實例代碼

    iReport生成pdf打印的實例代碼

    下面小編就為大家分享一篇iReport生成pdf打印的實例代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • Mybatis解決找不到get方法

    Mybatis解決找不到get方法

    這篇文章主要介紹了Mybatis解決找不到get方法問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • springboot整合阿里云百煉DeepSeek實現(xiàn)sse流式打印的操作方法

    springboot整合阿里云百煉DeepSeek實現(xiàn)sse流式打印的操作方法

    這篇文章主要介紹了springboot整合阿里云百煉DeepSeek實現(xiàn)sse流式打印,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2025-04-04
  • Spring運行時手動注入bean的方法實例

    Spring運行時手動注入bean的方法實例

    spring給我們提供了IOC服務(wù),讓我們可以用注解的方式,方便的使用bean的相互引用,下面這篇文章主要給大家介紹了關(guān)于Spring運行時手動注入bean的相關(guān)資料,需要的朋友可以參考下
    2022-05-05
  • SpringBoot整合FTP使用示例教程

    SpringBoot整合FTP使用示例教程

    這篇文章主要介紹了SpringBoot整合FTP使用示例教程,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-08-08
  • java中url任意跳轉(zhuǎn)漏洞的解決

    java中url任意跳轉(zhuǎn)漏洞的解決

    URL任意跳轉(zhuǎn)漏洞是一種安全漏洞,它發(fā)生在應(yīng)用程序沒有正確地驗證目標URL,允許攻擊者將用戶重定向到惡意網(wǎng)站,本文就來介紹一下漏洞的解決修復方案,感興趣的可以了解一下
    2024-06-06
  • SpringBoot結(jié)合mockito測試實戰(zhàn)

    SpringBoot結(jié)合mockito測試實戰(zhàn)

    與集成測試將系統(tǒng)作為一個整體測試不同,單元測試更應(yīng)該專注于某個類。所以當被測試類與外部類有依賴的時候,尤其是與數(shù)據(jù)庫相關(guān)的這種費時且有狀態(tài)的類,很難做單元測試。但好在可以通過“Mockito”這種仿真框架來模擬這些比較費時的類,從而專注于測試某個類內(nèi)部的邏輯
    2022-11-11
  • Java判斷主機是否能ping通代碼實例

    Java判斷主機是否能ping通代碼實例

    這篇文章主要介紹了Java判斷主機是否能ping通代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-01-01
  • 詳解java如何處理各種批量數(shù)據(jù)入庫

    詳解java如何處理各種批量數(shù)據(jù)入庫

    這篇文章主要為大家詳細介紹了java如何使用BlockingQueue處理各種批量數(shù)據(jù)入庫,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2023-11-11

最新評論

乌什县| 盐源县| 贵港市| 临桂县| 建宁县| 盐源县| 漯河市| 黎城县| 进贤县| 大石桥市| 莱阳市| 松阳县| 和硕县| 福鼎市| 盐亭县| 新和县| 客服| 肃南| 慈溪市| 南乐县| 浦江县| 德格县| 页游| 襄汾县| 盐城市| 曲周县| 建昌县| 景宁| 鄂伦春自治旗| 高雄县| 庐江县| 吴江市| 兰坪| 广饶县| 隆回县| 鄂伦春自治旗| 湘潭县| 鄂伦春自治旗| 淮安市| 台湾省| 防城港市|