Java網(wǎng)絡(luò)編程
實(shí)現(xiàn)基于TCP協(xié)議的Socket編程
- 關(guān)鍵步驟如下:1. 兩個(gè)端點(diǎn)進(jìn)行連接。2.打開傳遞信息的輸入/輸出流。3.傳遞數(shù)據(jù)、接收數(shù)據(jù)。4.關(guān)閉連接
認(rèn)識(shí)Soket
- Socket概述
- Java最初是作為網(wǎng)絡(luò)編程語言出現(xiàn)的,它對(duì)網(wǎng)絡(luò)的高度支持,使得客戶端和服務(wù)器端流暢的溝通變成現(xiàn)實(shí)。而在網(wǎng)絡(luò)編程中,使用最多的就是Socket,每一個(gè)實(shí)用的網(wǎng)絡(luò)程序都少不了它的參與。
- 在計(jì)算機(jī)網(wǎng)絡(luò)編程技術(shù)中,兩個(gè)進(jìn)程或者說兩臺(tái)計(jì)算機(jī)可以通過一個(gè)網(wǎng)絡(luò)通信連接實(shí)現(xiàn)數(shù)據(jù)的交換,這種通信鏈路的端點(diǎn)被稱為“套接字”(英文名稱也就是Socket),Socket是網(wǎng)絡(luò)驅(qū)動(dòng)層提供給應(yīng)用程序的一個(gè)接口或者說一種機(jī)制。
- Socket通信原理
- 對(duì)于編程人員來說,無須了解Socket底層機(jī)制是如何傳送數(shù)據(jù)的,而是直接將數(shù)據(jù)提交給Socket,Socket會(huì)根據(jù)應(yīng)用提供的相關(guān)信息,通過一系列計(jì)算,綁定IP及信息數(shù)據(jù),將數(shù)據(jù)交給驅(qū)動(dòng)程序向網(wǎng)絡(luò)上發(fā)送。
- java.net包
- java.net包中常用的類有Socket、ServerSocket、DatagramPacket、DatagramSocket、InetAddress、URL、URLConnection和URLEncoderdeng
- 為了監(jiān)聽客戶端的連接請(qǐng)求,可以使用SeverSocket類。Socket類實(shí)現(xiàn)用于網(wǎng)絡(luò)上進(jìn)程間通信的套接字。DatagramSocket類使用UDP協(xié)議實(shí)現(xiàn)客戶端和服務(wù)器套接字。DatagramPacket類使用DatagramSocket類的對(duì)象封裝設(shè)置和收到的數(shù)據(jù)報(bào)。InetAddress類表示Internet地址。在創(chuàng)建數(shù)據(jù)報(bào)報(bào)文和Socket對(duì)象時(shí),可以使用InetAddress類。
基于TCP協(xié)議的Socket編程
java.net包的兩個(gè)類的Socket和ServerSocket,分別用來實(shí)現(xiàn)雙向安全連接的客戶端和服務(wù)端,他們是基于TCP協(xié)議進(jìn)行工作的,它的工作過程如同打電話的過程,只有雙方都接通了,才能開始通話。
進(jìn)行網(wǎng)絡(luò)通信時(shí),Socket需要借助數(shù)據(jù)流來完成數(shù)據(jù)的傳遞工作。如果一個(gè)應(yīng)用程序要通過網(wǎng)絡(luò)向另一個(gè)應(yīng)用程序發(fā)送數(shù)據(jù),只要簡(jiǎn)單地創(chuàng)建Socket,然后將數(shù)據(jù)寫入到與該Socket關(guān)聯(lián)的輸出流即可。對(duì)應(yīng)的,接收方的應(yīng)用程序創(chuàng)建Socket,從相關(guān)聯(lián)的輸入流讀取數(shù)據(jù)即可
注意:2個(gè)端點(diǎn)在基于TCP協(xié)議的Socket編程中,經(jīng)常一個(gè)作為客戶端,一個(gè)作為服務(wù)端,也就是遵循client-serve模型
-
Socket類對(duì)象在客戶端和服務(wù)器之間建立連接??捎肧ocket類的構(gòu)造方法創(chuàng)建套接字,并將此套接字連接至指定的主機(jī)和端口。以下時(shí)與此Socket對(duì)象關(guān)聯(lián)的構(gòu)造方法和一些常用方法。
-
構(gòu)造方法
-
第一種構(gòu)造方法以主機(jī)名和端口號(hào)作為參數(shù)來創(chuàng)建一個(gè)Socket對(duì)象。
Socket s=new Socket(hostName,port); //另一種構(gòu)造方法以InetAdress對(duì)象和端口號(hào)作為參數(shù)來創(chuàng)建一個(gè)Socket Socket s=new Socket(address,port);
-
-
Server Socket類
- ServerSocket對(duì)象等待客戶端建立連接,連接建立以后進(jìn)行通信
-
構(gòu)造方法
-
可用的構(gòu)造方法有兩種。第一種接收端口號(hào)作為參數(shù)創(chuàng)建ServerSocke對(duì)象。
ServerSocket ss=new ServerSocket(port); -
另一種接受端口號(hào)和最大隊(duì)列長(zhǎng)度作為參數(shù),隊(duì)列長(zhǎng)度表示系統(tǒng)在拒絕連接前可以擁有的最大客戶端連接數(shù)
ServerSocket ss=new ServerSocket(port,maxqu);
-
- 常用方法
- Socket類中列出的常用方法也適用于ServerSocket類。此外,ServerSocket類具有accept()方法,此方法用于等待客戶端發(fā)起通信,這樣Socket對(duì)象就可用于進(jìn)一步的數(shù)據(jù)傳輸。