一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務(wù)器之家 - 編程語言 - JAVA教程 - Java網(wǎng)絡(luò)編程基礎(chǔ)教程之Socket入門實(shí)例

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

2019-11-28 14:28junjie JAVA教程

這篇文章主要介紹了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ù)器(m.ythuaji.com.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();


代碼非常簡單,但是想要通過網(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();


(全文完)

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: gaygayas男男免费中国 | 亚洲精品午夜久久aaa级久久久 | 国产成人99久久亚洲综合精品 | 91免费精品国自产拍在线可以看 | 互换身体全集免费观看 | 成人私人影院在线观看网址 | 精品福利视频一区二区三区 | 成人免费体验区福利云点播 | 国产午夜亚洲精品一区网站 | 亚洲成a人片777777久久 | 欧美va在线高清 | zol中关村在线 | 大伊香蕉精品视频一区 | 亚洲 日韩 国产 中文视频 | 亚洲国产福利精品一区二区 | 2018天天拍拍拍免费视频 | 美女全身无遮挡 | 千金奴隶在线 | 成人在线视频观看 | 羞羞视频免费观看网站 | 色综合久久日韩国产 | 丝瓜秋葵番茄绿巨人在线观看 | kayden kross喷水 | 二次元美女内裤凹陷太深 | 国内9lporm自拍视频区 | 日本高清视频在线的 | 四虎影院大全 | 波多野结衣女教师在线观看 | 猛男壮男受bl爽哭了高h | 2022国产在线观看 | 国内体内she精视频免费 | 邪恶肉肉全彩色无遮琉璃神社 | 1313午夜精品理伦片 | 国产高清好大好夹受不了了 | 亚洲 国产精品 日韩 | 欧美成a人片免费看久久 | 四虎影音先锋 | 2019nv天堂| 狠狠色综合久久婷婷色天使 | 国产成人在线视频播放 | 精品国产三级av在线 |