国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

Java網絡編程基礎教程之Socket入門實例

2019-11-26 15:25:27
字體:
來源:轉載
供稿:網友

當我們想要在Java中使用TCP/IP通過網絡連接到服務器時,就需要創建java.net.Socket對象并連接到服務器。假如希望使用Java NIO,也可以創建Java NIO中的SocketChannel對象。

創建Socket

下面的示例代碼是連接到IP地址為78.64.84.171服務器上的80端口,這臺服務器就是我們的Web服務器(www.survivalescaperooms.com),而80端口就是Web服務端口。

復制代碼 代碼如下:

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

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

Socket socket = new Socket("VeVB.COm", 80);

Socket發送數據

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

復制代碼 代碼如下:

Socket socket = new Socket("VeVB.COm", 80);
OutputStream out = socket.getOutputStream();

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

socket.close();


代碼非常簡單,但是想要通過網絡將數據發送到服務器端,一定不要忘記調用flush()方法。操作系統底層的TCP/IP實現會先將數據放入一個更大的數據緩存塊中,而緩存塊的大小是與TCP/IP的數據包大小相適應的。(譯者注:調用flush()方法只是將數據寫入操作系統緩存中,并不保證數據會立即發送)

Socket讀取數據

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

復制代碼 代碼如下:

Socket socket = new Socket("VeVB.COm", 80);
InputStream in = socket.getInputStream();

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

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


代碼也并不復雜,但需要注意的是,從Socket的輸入流中讀取數據并不能讀取文件那樣,一直調用read()方法直到返回-1為止,因為對Socket而言,只有當服務端關閉連接時,Socket的輸入流才會返回-1,而是事實上服務器并不會不停地關閉連接。假設我們想要通過一個連接發送多個請求,那么在這種情況下關閉連接就顯得非常愚蠢。

因此,從Socket的輸入流中讀取數據時我們必須要知道需要讀取的字節數,這可以通過讓服務器在數據中告知發送了多少字節來實現,也可以采用在數據末尾設置特殊字符標記的方式連實現。

關閉Socket

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

復制代碼 代碼如下:

Socket socket = new Socket("VeVB.COm", 80);

socket.close();


(全文完)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 旬邑县| 诸城市| 蕉岭县| 龙胜| 贵溪市| 东乌珠穆沁旗| 平陆县| 溧水县| 仁布县| 宿迁市| 永嘉县| 九江市| 深圳市| 沙洋县| 昭觉县| 富源县| 泸溪县| 巢湖市| 蚌埠市| 藁城市| 长葛市| 六盘水市| 南京市| 柳州市| 武隆县| 双城市| 璧山县| 腾冲县| 越西县| 淅川县| 东乌珠穆沁旗| 贵德县| 抚顺市| 固安县| 应用必备| 成都市| 安顺市| 五莲县| 衡水市| 延吉市| 贵州省|