欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

一、使用telnet

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

可以通過兩個(gè)基本的實(shí)驗(yàn)來認(rèn)識(shí)telnet

輸入:

telnet time-a.nist.gov 13

得到:

image-20211013155434367

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

輸入:

telnet horstmann.com 80

返回:

因?yàn)檫@里是訪問外網(wǎng)的原因可能遲遲沒有給我消息,但是其實(shí)我是可以發(fā)送一個(gè)HTTP 的報(bào)文,向這個(gè)服務(wù)器提交請(qǐng)求

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

這樣的GET請(qǐng)求服務(wù)器會(huì)返回我一個(gè)HTML 的頁面代碼

image-20211013160451201

image-20211013160512059

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

public class Test1 {
    public static void main(String[] args) {
        /*創(chuàng)建一個(gè)指定地址和端口的套接字,如果創(chuàng)建失敗會(huì)拋出一個(gè)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 不存在之外的異常會(huì)拋出一個(gè)IOException 異常
            * UnknownHostException是這個(gè)異常的子異常
            * */
            e.printStackTrace();
        }
    }
}

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

image-20211013161701001

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

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

解決超時(shí)

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

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

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

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

可以通過:

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

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

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

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

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

獲取指定域名的IP地址:

public class Test1 {
    public static void main(String[] args) throws UnknownHostException {
        String host = "www.baidu.com";
        /*InetAddress address = InetAddress.getByAddress(host);*/
        /*
        一般的域名只會(huì)對(duì)應(yīng)一個(gè)一個(gè)IP地址
        而一些訪問量比較大的域名會(huì)對(duì)應(yīng)多個(gè)IP地址,從而實(shí)現(xiàn)負(fù)載均衡
        可以通過上面的方法獲取一個(gè)IP地址
        也可以通過下面的方法獲取一個(gè)域名對(duì)應(yīng)的多個(gè)IP地址
         */
        /*InetAddress 的toString方法會(huì)會(huì)返回一個(gè)字符串類型,進(jìn)而打印會(huì)輸出對(duì)應(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

前面輸出的是主機(jī)名而后面輸出的是主機(jī)的IP地址

image-20211013170056989

四、用到的API

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

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

Socket

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

InputStream getInputStream()
OutputStream getOutputStream()

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

void connect(SocketAddress address)

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

void connect(SocketAddress address,int timeout)

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

void setTimeout(int timeout)

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

boolean isConnected()

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

boolean isClosed()

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

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

給定主機(jī)名一個(gè)InetAddress 對(duì)象,或者一個(gè)數(shù)組

static InetAddress getLocalHost()

為本機(jī)創(chuàng)建一個(gè)InetAddress 對(duì)象

byte[] getAddress()

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

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

String getHostAddress()

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

129.6.15.28

String getHostName()

返回主機(jī)名

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

相關(guān)文章

  • MyBatis傳入List集合查詢數(shù)據(jù)問題

    MyBatis傳入List集合查詢數(shù)據(jù)問題

    這篇文章主要介紹了MyBatis傳入List集合查詢數(shù)據(jù)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 2021年最新Redis面試題匯總(4)

    2021年最新Redis面試題匯總(4)

    在程序員面試過程中redis相關(guān)的知識(shí)是常被問到的話題。這篇文章主要介紹了幾道Redis面試題,整理一下分享給大家,感興趣的小伙伴們可以參考一下
    2021-07-07
  • java中optional的一些常用方法總結(jié)

    java中optional的一些常用方法總結(jié)

    Java8引入了一個(gè)非常強(qiáng)大的特性就是Optional類,其主要解決的問題就是我們編程時(shí)常常遇到的空指針異常,下面這篇文章主要給大家介紹了關(guān)于java中optional的一些常用方法,需要的朋友可以參考下
    2023-04-04
  • Java實(shí)現(xiàn)Excel文件轉(zhuǎn)PDF(無水印無限制)

    Java實(shí)現(xiàn)Excel文件轉(zhuǎn)PDF(無水印無限制)

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)Excel文件轉(zhuǎn)PDF的效果,并可以無水印、無限制。文中的示例代碼講解詳細(xì),需要的可以參考一下
    2022-06-06
  • 使用Java實(shí)現(xiàn)大小寫轉(zhuǎn)換實(shí)例代碼

    使用Java實(shí)現(xiàn)大小寫轉(zhuǎn)換實(shí)例代碼

    最近在開發(fā)項(xiàng)目中遇到一個(gè)比較好用的方法,那就是對(duì)字符串中的字母大小進(jìn)行轉(zhuǎn)換,所以下面這篇文章主要給大家介紹了關(guān)于如何使用Java實(shí)現(xiàn)大小寫轉(zhuǎn)換的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • Java之NoClassDefFoundError的原因及分析

    Java之NoClassDefFoundError的原因及分析

    在Java開發(fā)中,經(jīng)常會(huì)遇到ClassNotFoundException和NoClassDefFoundError異常,ClassNotFoundException發(fā)生在編譯時(shí)JVM無法找到類,而NoClassDefFoundError則發(fā)生在運(yùn)行時(shí)JVM無法加載類,這兩個(gè)異常雖然原因相似,但有本質(zhì)區(qū)別
    2024-09-09
  • springboot中shiro使用自定義注解屏蔽接口鑒權(quán)實(shí)現(xiàn)

    springboot中shiro使用自定義注解屏蔽接口鑒權(quán)實(shí)現(xiàn)

    本文主要介紹了springboot中shiro使用自定義注解屏蔽接口鑒權(quán)實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • 如何解決Mybatis--java.lang.IllegalArgumentException: Result Maps collection already contains value for X

    如何解決Mybatis--java.lang.IllegalArgumentException: Result Maps

    這兩天因?yàn)轫?xiàng)目需要整合spring、struts2、mybatis三大框架,但啟動(dòng)的時(shí)候總出現(xiàn)這個(gè)錯(cuò)誤,困擾我好久,折騰了好久終于找到問題根源,下面小編給大家分享下問題所在及解決辦法,一起看看吧
    2016-12-12
  • IDEA引入本地jar包的幾種方法

    IDEA引入本地jar包的幾種方法

    本文主要介紹了IDEA引入本地jar包的幾種方法,文中通過圖文結(jié)合的方式碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2024-01-01
  • Java利用Socket和IO流實(shí)現(xiàn)文件的上傳與下載

    Java利用Socket和IO流實(shí)現(xiàn)文件的上傳與下載

    本文主要介紹了Java利用Socket和IO流實(shí)現(xiàn)文件的上傳與下載,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04

最新評(píng)論