亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java網(wǎng)絡(luò)編程基礎(chǔ)教程之Socket入門實(shí)例

 更新時(shí)間:2014年09月19日 10:26:11   投稿:junjie  
這篇文章主要介紹了Java網(wǎng)絡(luò)編程基礎(chǔ)教程之Socket入門實(shí)例,本文講解了創(chuàng)建Socket、Socket發(fā)送數(shù)據(jù)、Socket讀取數(shù)據(jù)、關(guān)閉Socket等內(nèi)容,都是最基礎(chǔ)的知識(shí)點(diǎn),需要的朋友可以參考下

當(dāng)我們想要在Java中使用TCP/IP通過網(wǎng)絡(luò)連接到服務(wù)器時(shí),就需要?jiǎng)?chuàng)建java.net.Socket對(duì)象并連接到服務(wù)器。假如希望使用Java NIO,也可以創(chuàng)建Java NIO中的SocketChannel對(duì)象。

創(chuàng)建Socket

下面的示例代碼是連接到IP地址為78.64.84.171服務(wù)器上的80端口,這臺(tái)服務(wù)器就是我們的Web服務(wù)器(chabaoo.cn),而80端口就是Web服務(wù)端口。

復(fù)制代碼 代碼如下:

Socket socket = new Socket("78.46.84.171", 80);

我們也可以像如下示例中使用域名代替IP地址:
復(fù)制代碼 代碼如下:

Socket socket = new Socket("jb51.net", 80);

Socket發(fā)送數(shù)據(jù)

要通過Socket發(fā)送數(shù)據(jù),我們需要獲取Socket的輸出流(OutputStream),示例代碼如下:

復(fù)制代碼 代碼如下:

Socket socket = new Socket("jb51.net", 80);
OutputStream out = socket.getOutputStream();

out.write("some data".getBytes());
out.flush();
out.close();

socket.close();


代碼非常簡(jiǎn)單,但是想要通過網(wǎng)絡(luò)將數(shù)據(jù)發(fā)送到服務(wù)器端,一定不要忘記調(diào)用flush()方法。操作系統(tǒng)底層的TCP/IP實(shí)現(xiàn)會(huì)先將數(shù)據(jù)放入一個(gè)更大的數(shù)據(jù)緩存塊中,而緩存塊的大小是與TCP/IP的數(shù)據(jù)包大小相適應(yīng)的。(譯者注:調(diào)用flush()方法只是將數(shù)據(jù)寫入操作系統(tǒng)緩存中,并不保證數(shù)據(jù)會(huì)立即發(fā)送)

Socket讀取數(shù)據(jù)

從Socket中讀取數(shù)據(jù),我們就需要獲取Socket的輸入流(InputStream),代碼如下:

復(fù)制代碼 代碼如下:

Socket socket = new Socket("jb51.net", 80);
InputStream in = socket.getInputStream();

int data = in.read();
//... read more data...

in.close();
socket.close();


代碼也并不復(fù)雜,但需要注意的是,從Socket的輸入流中讀取數(shù)據(jù)并不能讀取文件那樣,一直調(diào)用read()方法直到返回-1為止,因?yàn)閷?duì)Socket而言,只有當(dāng)服務(wù)端關(guān)閉連接時(shí),Socket的輸入流才會(huì)返回-1,而是事實(shí)上服務(wù)器并不會(huì)不停地關(guān)閉連接。假設(shè)我們想要通過一個(gè)連接發(fā)送多個(gè)請(qǐng)求,那么在這種情況下關(guān)閉連接就顯得非常愚蠢。

因此,從Socket的輸入流中讀取數(shù)據(jù)時(shí)我們必須要知道需要讀取的字節(jié)數(shù),這可以通過讓服務(wù)器在數(shù)據(jù)中告知發(fā)送了多少字節(jié)來實(shí)現(xiàn),也可以采用在數(shù)據(jù)末尾設(shè)置特殊字符標(biāo)記的方式連實(shí)現(xiàn)。

關(guān)閉Socket

當(dāng)使用完Socket后我們必須將Socket關(guān)閉,斷開與服務(wù)器之間的連接。關(guān)閉Socket只需要調(diào)用Socket.close()方法即可,代碼如下:

復(fù)制代碼 代碼如下:

Socket socket = new Socket("jb51.net", 80);

socket.close();


(全文完)

相關(guān)文章

  • SpringBoot中定時(shí)任務(wù)@Scheduled注解的使用解讀

    SpringBoot中定時(shí)任務(wù)@Scheduled注解的使用解讀

    這篇文章主要介紹了SpringBoot中定時(shí)任務(wù)@Scheduled注解的使用解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Java環(huán)境變量的設(shè)置方法(圖文教程)

    Java環(huán)境變量的設(shè)置方法(圖文教程)

    想要成功配置Java的環(huán)境變量,那肯定就要安裝JDK,才能開始配置的。
    2013-05-05
  • 教你如何監(jiān)控 Java 線程池運(yùn)行狀態(tài)的操作(必看)

    教你如何監(jiān)控 Java 線程池運(yùn)行狀態(tài)的操作(必看)

    這篇文章主要介紹了教你如何監(jiān)控 Java 線程池運(yùn)行狀態(tài)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • SpringBoot JWT實(shí)現(xiàn)token登錄刷新功能

    SpringBoot JWT實(shí)現(xiàn)token登錄刷新功能

    JWT本身是無狀態(tài)的,這點(diǎn)有別于傳統(tǒng)的session,不在服務(wù)端存儲(chǔ)憑證。這種特性使其在分布式場(chǎng)景,更便于擴(kuò)展使用。接下來通過本文給大家分享SpringBoot JWT實(shí)現(xiàn)token登錄刷新功能,感興趣的朋友一起看看吧
    2021-09-09
  • java中子類繼承父類,程序運(yùn)行順序的深入分析

    java中子類繼承父類,程序運(yùn)行順序的深入分析

    本篇文章是對(duì)java中子類繼承父類,程序運(yùn)行順序進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • springboot整合mybatis分頁攔截器的問題小結(jié)

    springboot整合mybatis分頁攔截器的問題小結(jié)

    springboot整合mybatis分頁攔截器,分頁攔截實(shí)際上就是獲取sql后將sql拼接limit,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-07-07
  • springcloud使用profile實(shí)現(xiàn)多環(huán)境配置方式

    springcloud使用profile實(shí)現(xiàn)多環(huán)境配置方式

    這篇文章主要介紹了springcloud使用profile實(shí)現(xiàn)多環(huán)境配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java數(shù)據(jù)結(jié)構(gòu)之查找

    Java數(shù)據(jù)結(jié)構(gòu)之查找

    本文主要介紹了Java數(shù)據(jù)結(jié)構(gòu)中查找的相關(guān)知識(shí)。具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • Spring boot中mongodb的使用

    Spring boot中mongodb的使用

    MongoDB是最早熱門非關(guān)系數(shù)據(jù)庫的之一,使用也比較普遍,一般會(huì)用做離線數(shù)據(jù)分析來使用,放到內(nèi)網(wǎng)的居多。這篇文章主要介紹了Spring boot中mongodb的使用,需要的朋友可以參考下
    2017-05-05
  • 在Spring-Boot中如何使用@Value注解注入集合類

    在Spring-Boot中如何使用@Value注解注入集合類

    這篇文章主要介紹了在Spring-Boot中如何使用@Value注解注入集合類的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論