資源描述:
《java編程之socket》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在工程資料-天天文庫。
1、7.2面向套接字編程我們已經(jīng)通過了解Socket的接口,知其所以然,下面我們就將通過具體的案例,來熟悉Socket的具體工作方式7.2.1使用套接字實(shí)現(xiàn)基于TCP協(xié)議的服務(wù)器和客戶機(jī)程序依據(jù)TCP協(xié)議,在C/S架構(gòu)的通訊過程中,客戶端和服務(wù)器的Socket動(dòng)作如下:客戶端:1.用服務(wù)器的IP地址和端口號(hào)實(shí)例化Socket對象。2.調(diào)用connect方法,連接到服務(wù)器上。3.將發(fā)送到服務(wù)器的IO流填充到IO對象里,比如BufferedReader/PrintWriter。4.利用Socket提供的getInputStream和getOut
2、putStream方法,通過IO流對象,向服務(wù)器發(fā)送數(shù)據(jù)流。5.通訊完成后,關(guān)閉打開的IO對象和Socket。服務(wù)器:1.在服務(wù)器,用一個(gè)端口來實(shí)例化一個(gè)ServerSocket對象。此時(shí),服務(wù)器就可以這個(gè)端口時(shí)刻監(jiān)聽從客戶端發(fā)來的連接請求。2.調(diào)用ServerSocket的accept方法,開始監(jiān)聽連接從端口上發(fā)來的連接請求?! ?.利用accept方法返回的客戶端的Socket對象,進(jìn)行讀寫IO的操作通訊完成后,關(guān)閉打開的流和Socket對象。7.2.1.1開發(fā)客戶端代碼根據(jù)上面描述的通訊流程,我們可以按如下的步驟設(shè)計(jì)服務(wù)器端的代碼
3、。第一步,依次點(diǎn)擊Eclipse環(huán)境里的“文件”
4、“新建”
5、“項(xiàng)目”選項(xiàng),進(jìn)入“新建項(xiàng)目”的向?qū)υ捒颍谄渲羞x中“Java項(xiàng)目”,點(diǎn)擊“下一步”按鈕,在隨后彈出的對話框里,在其中的“項(xiàng)目名”一欄里,輸入項(xiàng)目名“TCPSocket”,其它的選項(xiàng)目選擇系統(tǒng)默認(rèn)值,再按“完成”按鈕,結(jié)束創(chuàng)建Java項(xiàng)目的動(dòng)作。第二步,完成創(chuàng)建項(xiàng)目后,選中集成開發(fā)環(huán)境左側(cè)的項(xiàng)目名“TCPSocket”,點(diǎn)擊右鍵,在隨后彈出的菜單里依次選擇“新建”!“類”的選項(xiàng),創(chuàng)建服務(wù)器類的代碼。在隨后彈出的“新建Java類”的對話框里,輸入包名“tcp”,輸入文件名“Se
6、rverCode”,請注意大小寫,在“修飾符”里選中“公用”,在“想要?jiǎng)?chuàng)建哪些方法存根”下,選中“publicstaticvoidmain(String[]args)”單選框,同時(shí)把其它兩項(xiàng)目取消掉,再按“完成”按鈕,可以生成代碼。第三步,在生成的代碼里,編寫引入Java包的代碼,只有當(dāng)我們引入這些包后,我們才能調(diào)用這些包里提供的IO和Socket類的方法。packagetcp;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.IOExcept
7、ion;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;importjava.net.ServerSocket;importjava.net.Socket;第四步,編寫服務(wù)器端的主體代碼,如下所示。publicclassServerCode{//設(shè)置端口號(hào)publicstaticintportNo=3333;publicstaticvoidmain(String[]args)throwsIOExcepti
8、on{ServerSockets=newServerSocket(portNo);System.out.println("TheServerisstart:"+s);//阻塞,直到有客戶端連接Socketsocket=s.accept();try{System.out.println("AccepttheClient:"+socket);//設(shè)置IO句柄BufferedReaderin=newBufferedReader(newInputStreamReader(socket.getInputStream()));PrintWriter
9、out=newPrintWriter(newBufferedWriter(newOutputStreamWriter(socket.getOutputStream())),true);while(true){Stringstr=in.readLine();if(str.equals("byebye")){break;}System.out.println("InServerreveivedtheinfo:"+str);out.println(str);}}finally{System.out.println("closetheServe
10、rsocketandtheio.");socket.close();s.close();}}}這段代碼的主要業(yè)務(wù)邏輯是:1.在上述代碼里的main函數(shù)前,我們設(shè)置了通訊所用到的端口號(hào),為3333。2.在ma