《Java Socket 編程》由會(huì)員分享,可在線閱讀,更多相關(guān)《Java Socket 編程(41頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、單擊此處編輯母版標(biāo)題樣式,單擊此處編輯母版文本樣式,第二級(jí),第三級(jí),第四級(jí),第五級(jí),*,技術(shù)成就夢(mèng)想-貝??萍几叨巳瞬排嘤?xùn)計(jì)劃,*,Socket,編程,Socket,編程,InetAddress,URL,網(wǎng)絡(luò)應(yīng)用工作流程,套接字,Socket,工作步驟,Socket,客戶端服務(wù)器工作圖,ServerSocket,和,Socket,創(chuàng)建客戶端、服務(wù)器數(shù)據(jù)發(fā)送接收實(shí)例,掃描端口及自義通信協(xié)議,設(shè)置連接超時(shí)時(shí)間和請(qǐng)求隊(duì)列,設(shè)置數(shù)據(jù)緩沖區(qū),創(chuàng)建多線程服務(wù)器,為客戶的分配線程,使用,JDK,線程池方式創(chuàng)建多線程服務(wù)器,使用線程池注意點(diǎn),UDP,UDP,工作步驟及通信,總結(jié),技術(shù)成就夢(mèng)想-貝福科技高端人才
2、培訓(xùn)計(jì)劃,Socket,編程,Socke,編程就是指網(wǎng)絡(luò)編程。,服務(wù)器:,提供信息資源的計(jì)算機(jī)或服務(wù)器。,客戶機(jī):,請(qǐng)求信息資源的計(jì)算機(jī)或程序。,某些情況下當(dāng)客戶機(jī)和服務(wù)器互相請(qǐng)求,互相提供信息的時(shí)候,很難區(qū)分誰是服務(wù)器,誰是客戶機(jī)。,傳輸協(xié)議,:,TCP(Transmission Control Protocol,傳輸控制協(xié)議,),:,“,面向連接,”,可靠的、基于字節(jié)流的傳輸層(,Transport layer,)通信協(xié)議。如:打電話。,面向連接服務(wù)要經(jīng)過三個(gè)階段:數(shù)據(jù)傳數(shù)前,,先建立連接,,連接建立后再,傳輸數(shù)據(jù),,數(shù)據(jù)傳送完后,,釋放連接,。面向連接服務(wù),可,確保數(shù)據(jù)傳送的次序和傳輸?shù)?/p>
3、可靠性,。,UDP(User,Datagram Protocol,用戶數(shù)據(jù)包協(xié)議,),:,“,面向非連接,”,在正式通信前不必與對(duì)方先建立連接,不管對(duì)方狀態(tài)就直接發(fā)送。如:寫信。,無連接服務(wù)的特點(diǎn)是:無連接服務(wù)只有,傳輸數(shù)據(jù),階段。,消除了除數(shù)據(jù)通信外的其它開銷,。,IP,(,Internet Protocol,):計(jì)算機(jī),網(wǎng)絡(luò)相互連接,進(jìn)行通信而設(shè)計(jì)的協(xié)議?;ヂ?lián)網(wǎng)地址或,Internet,地址。是用來唯一標(biāo)識(shí)互聯(lián)網(wǎng)上計(jì)算機(jī)的邏輯地址。相當(dāng)于電話號(hào)碼。,技術(shù)成就夢(mèng)想-貝??萍几叨巳瞬排嘤?xùn)計(jì)劃,OSI,七層協(xié)議模型,技術(shù)成就夢(mèng)想-貝福科技高端人才培訓(xùn)計(jì)劃,網(wǎng)絡(luò)的層次模型,技術(shù)成就夢(mèng)想-貝??萍几?/p>
4、端人才培訓(xùn)計(jì)劃,InetAddress,InetAddress,代表了一個(gè)網(wǎng)絡(luò)目標(biāo)地址對(duì)象,封裝了主機(jī)名和數(shù)字類型的地址信息。,InetAddress,ia,=,InetAddress.,getLocalHost,();,/,獲得本機(jī),IP,地址情況,System.,out,.println(ia.getHostName,();,/,得到主機(jī)名,System.,out,.println(ia.getHostAddress,();,/,得到主機(jī)地址,InetAddress,ia2=InetAddress.getByName(T1);,/,通過主機(jī)名獲得信息,System.,out,.printl
5、n(ia2.getHostAddress();,InetAddress,ia3=,InetAddress.,getByAddress,(,new,byte,(,byte,)192,(,byte,)168,0,86);,/,通過主機(jī),IP,獲得信息,System.,out,.println(ia3.getHostName();,InetAddress,ia4=InetAddress.,getByName,();,/,根據(jù)域名到,DNS,查詢,Ip,System.,out,.println(163 IP:+ia4.getHostAddress();,技術(shù)成就夢(mèng)想-貝??萍几叨巳瞬排嘤?xùn)計(jì)劃,URL,
6、實(shí)現(xiàn)網(wǎng)頁(yè)靜態(tài)化,類,URL,代表一個(gè)統(tǒng)一資源定位符,它是指向互聯(lián)網(wǎng)“資源”的指針。利用他可以獲得網(wǎng)絡(luò)資源,,讀取,WWW,服務(wù)器上的數(shù)據(jù)。,這里我們將讀取到的數(shù)據(jù)轉(zhuǎn)換為流,然后保存到本地(類似網(wǎng)頁(yè)靜態(tài)化)。,BufferedReader,br,=,null,;FileWriter,fw,=,null,;,try,URL u=new URL(http:/ s=,null,;,while,(s,=,br.readLine,()!=,null,),/,操作,System.,out,.println(s,);,fw.write(s,);,catch,(,MalformedURLException,e)
7、,e.printStackTrace,();,catch,(,IOException,e),e.printStackTrace();,finally,try,br.close();fw.flush();fw.close,();,catch,(,IOException,e),e.printStackTrace,();,技術(shù)成就夢(mèng)想-貝??萍几叨巳瞬排嘤?xùn)計(jì)劃,網(wǎng)絡(luò)應(yīng)用工作流程,網(wǎng)絡(luò)應(yīng)用工作流程,我們用,寫信,來舉例:,IP,確定位置(相當(dāng)于,寄信的地址,),端口確定該位置上的服務(wù)(具體是,寄給哪個(gè)人的信,)。,IP,可以定位到具體的計(jì)算機(jī),端口代表計(jì)算機(jī)上提供的具體服務(wù)。,IP,與端口的組合得出一
8、個(gè),套接字,(將應(yīng)用程序和端口連接起來),達(dá)到完全分辨網(wǎng)絡(luò)上運(yùn)行的程序的作用。,技術(shù)成就夢(mèng)想-貝??萍几叨巳瞬排嘤?xùn)計(jì)劃,TCP,套接字,為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與,TCP,IP,協(xié)議交互提供了稱為套接字,(Socket),的接口。,Socket,可以看作是通信連接兩端的收發(fā)器。,Socket,可以看成在兩個(gè)程序進(jìn)行,通訊連接中的一個(gè)端點(diǎn)。,Socket,所要完成的通信就是基于連接的通信,建立連接所需的程序分別運(yùn)行在客戶端和服務(wù)器端。,套接字連接就是客戶端的套接字對(duì)象和服務(wù)器端的套接字對(duì)象通過輸入,/,輸出流連接在一起。,套接字,,,Socket,是網(wǎng)絡(luò)上運(yùn)
9、行的程序之間雙向通信鏈路的端點(diǎn)。,技術(shù)成就夢(mèng)想-貝??萍几叨巳瞬排嘤?xùn)計(jì)劃,TCP,套接字,Socket,部分,通過將這,3,個(gè)參數(shù),結(jié)合起來,與一個(gè),Socket,綁定,應(yīng)用層就可以和傳輸層通過套接字接口,區(qū)分來自不同應(yīng)用程序進(jìn)程或網(wǎng)絡(luò)連接的通信,實(shí)現(xiàn)數(shù)據(jù)傳輸?shù)牟l(fā)服務(wù)。,在,Java,中,套接字(通信端點(diǎn))被抽象為類,我們只需要?jiǎng)?chuàng)建,Socket,類的對(duì)象,就可以使用套接字。,Socket,中有,輸入輸出流對(duì)象,,同時(shí)能實(shí)現(xiàn)服務(wù)器之間的,數(shù)據(jù)傳輸,。,一個(gè)程序(,Program B,)將一段信息寫入,Socket,中,該,Socket,將這段信息發(fā)送給另外一個(gè),Socket,(,Progra
10、m A,)中,使這段信息能傳送到其他程序中。,技術(shù)成就夢(mèng)想-貝??萍几叨巳瞬排嘤?xùn)計(jì)劃,Socket,工作步驟,建立連接,1.,在服務(wù)器端通過指定一個(gè)用來等待的連接的端口號(hào)創(chuàng)建一個(gè),ServerSocket,實(shí)例,.,2.,在客戶端通過主機(jī)和端口號(hào)創(chuàng)建一個(gè),socket,實(shí)例,連到服務(wù)器上,.,3.ServerSocket,類的,accept,方法使服務(wù)器處于阻塞狀態(tài),等待用戶請(qǐng)求,數(shù)據(jù)通信,建立,socket,連接后,還應(yīng)該建立輸入輸出數(shù)據(jù)流,,客戶程序可以向,Socket,寫入請(qǐng)求,服務(wù)器程序處理請(qǐng)求,并把處理結(jié)果通過,Socket,返回給客戶端,完成通過虛擬通道的數(shù)據(jù)通信;,拆除連接,通信
11、結(jié)束,將所建立的虛擬連接全部拆除。,注意:,在服務(wù)器端指定的端口的時(shí)候,要注意該端口是否可用,是否已經(jīng)被占用。,11023,已經(jīng)被系統(tǒng)占用了,應(yīng)使用,102465535,之間的端口號(hào),避免發(fā)生沖突。,常用網(wǎng)絡(luò)服務(wù)端口,:,技術(shù)成就夢(mèng)想-貝??萍几叨巳瞬排嘤?xùn)計(jì)劃,Socket,客戶端服務(wù)器工作圖,技術(shù)成就夢(mèng)想-貝??萍几叨巳瞬排嘤?xùn)計(jì)劃,ServerSocket,和,Socket,創(chuàng)建,ServerSocket,代表服務(wù)器端套接字。,Socket,代表客戶端套接字。,ServerSocket,負(fù)責(zé)監(jiān)聽,TCP,連接請(qǐng)求,并為每個(gè)連接創(chuàng)建新的,Socket,實(shí)例。就是說,服務(wù)端需要同時(shí)處理,Serv
12、erSocket,和,Socket,,而客戶端只需要使用,Socket,實(shí)例。,創(chuàng)建,ServerSocket,(服務(wù)端套接字):,ServerSocket(int,port),創(chuàng)建綁定到特定端口的服務(wù)器套接字。,ServerSocket(int,port,int,backlog),創(chuàng)建綁定到特定端口的服務(wù)器套接字,并指定最大連接數(shù)。,創(chuàng)建,Socket,(客戶端套接字):,Socket(InetAddress,address,int,port),創(chuàng)建一個(gè)流套接字并將其連接到指定,IP,地址的指定端口號(hào),。,Socket(String,host,int,port),創(chuàng)建一個(gè)流套接字并將其連接到
13、指定主機(jī)上的指定端口號(hào),。,技術(shù)成就夢(mèng)想-貝??萍几叨巳瞬排嘤?xùn)計(jì)劃,發(fā)送和接受流式數(shù)據(jù),為了能隨時(shí)監(jiān)聽客戶端的請(qǐng)求,可以使用,accept(),方法用來接收客戶機(jī)程序的連接請(qǐng)求,返回值是一個(gè)Socket類型的對(duì)象。,程序運(yùn)行到這里處于等待狀態(tài),。,Socket,對(duì)象創(chuàng)建成功后,就可以在客戶機(jī)與服務(wù)器之間建立一個(gè)連接,并通過這個(gè)連接在兩個(gè)端口之間傳送數(shù)據(jù)。,OutputStream,os,=,socket.,getOutputStream,(),返回此套接字的,輸出流,發(fā)送數(shù)據(jù)。,InputStream,is=,socket.,getInputStream,(),返回此套接字的,輸入流,接收數(shù)據(jù)
14、。,下面我們創(chuàng)建一個(gè)“回聲”的例子:,客戶端向服務(wù)器端發(fā)送數(shù)據(jù),然后服務(wù)器端返回客戶端發(fā)送的數(shù)據(jù)。,每一個(gè),Socket,存在時(shí)都占用一定的資源,在通信完成后,應(yīng)該斷開服務(wù)器端或客戶端上運(yùn)行的應(yīng)用程序,即斷開其虛擬連接并釋放所占用的系統(tǒng)資源。,close(),方法就能關(guān)閉當(dāng)前套接字,釋放資源。,技術(shù)成就夢(mèng)想-貝??萍几叨巳瞬排嘤?xùn)計(jì)劃,創(chuàng)建服務(wù)器端,創(chuàng)建服務(wù)器端,public,class,EhcoServer,ServerSocket,serverSocket,;,private,final,int,PORT=8888;,/,端口,public,EhcoServer,(),throws,IOEx
15、ception,serverSocket,=,new,ServerSocket(PORT,);,/,創(chuàng)建服務(wù)器端套接字,System.,out,.println,(,服務(wù)器啟動(dòng)。,);,/,servic,(),方法,public,static,void,main(String,args,),throws,IOException,new,EhcoServer().servic,();,/,啟動(dòng)服務(wù),技術(shù)成就夢(mèng)想-貝??萍几叨巳瞬排嘤?xùn)計(jì)劃,Service,public,void,servic,(),Socket,socket,=,null,;,while,(,true,),try,socket=,
16、serverSocket.accept,();,/,等待并取出用戶連接,并創(chuàng)建套接字,System.,out,.println,(,新連接,連接地址:,+,socket.getInetAddress,()+,:,+,socket.getPort,();,/,客戶端信息,/,輸入流,讀取客戶端信息,BufferedReader,br,=,new,BufferedReader(,new,InputStreamReader(socket.getInputStream,();,/,輸出流,向客戶端寫信息,BufferedWriter,bw,=,new,BufferedWriter(,new,OutputStreamWriter(socket.getOutputStream,();,PrintWriter,pw,=,new,PrintWriter(bw,true,);,/,裝飾輸出流,,true,每寫一行就刷新輸出緩沖區(qū),不用,flush,String info=,null,;,/,接收用戶輸入的信息,while,(info,=,br.readLine,()!=,null,),System.,o