真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

如何理解JavaSocket聊天程序核心代碼

如何理解Java Socket聊天程序核心代碼,針對(duì)這個(gè)問(wèn)題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問(wèn)題的小伙伴找到更簡(jiǎn)單易行的方法。

成都網(wǎng)站建設(shè)、成都做網(wǎng)站過(guò)程中,需要針對(duì)客戶(hù)的行業(yè)特點(diǎn)、產(chǎn)品特性、目標(biāo)受眾和市場(chǎng)情況進(jìn)行定位分析,以確定網(wǎng)站的風(fēng)格、色彩、版式、交互等方面的設(shè)計(jì)方向。成都創(chuàng)新互聯(lián)還需要根據(jù)客戶(hù)的需求進(jìn)行功能模塊的開(kāi)發(fā)和設(shè)計(jì),包括內(nèi)容管理、前臺(tái)展示、用戶(hù)權(quán)限管理、數(shù)據(jù)統(tǒng)計(jì)和安全保護(hù)等功能。

Java Socket聊天程序在編寫(xiě)的時(shí)候需要我們注意很多的事情,本程序是基于Java Socket聊天程序,采用TCP傳輸協(xié)議,實(shí)現(xiàn)兩個(gè)人之間的信息交互。下面我們就詳細(xì)的向大家介紹這一程序。

在形成最終結(jié)果之前,我經(jīng)歷了兩個(gè)過(guò)程程序,兩個(gè)過(guò)程均為半成品,他們反映了我整個(gè)課程設(shè)計(jì)中的思考過(guò)程,在一個(gè)較為系統(tǒng)思考過(guò)程后,socket思想一層一層加固,讓我映像很深刻,收獲很多。在此文檔中,我將演示我兩個(gè)過(guò)程程序的思考過(guò)程,然后對(duì)源代碼進(jìn)行講解,但最終上傳的代碼為制成品。

在兩個(gè)過(guò)程程序中,TestServer1和TestClient1為***個(gè)過(guò)程,TestServer2和TestClient2為第二個(gè)過(guò)程,MySingleThreadServer1和MySingleThreadClient1為最終程序。其中,TestServer2和TestClient2實(shí)現(xiàn)了多線(xiàn)程,一個(gè)線(xiàn)程負(fù)責(zé)接收,另一個(gè)線(xiàn)程負(fù)責(zé)發(fā)送,MySingleThreadServer1和MySingleThreadClient1實(shí)現(xiàn)了基于GUI的聊天??丶⒎窍馦FC那樣很容易就可以通過(guò)拖動(dòng)組件實(shí)現(xiàn),java是通過(guò)程序的編寫(xiě)來(lái)實(shí)現(xiàn),我采用awt組件編碼實(shí)現(xiàn)GUI,界面很簡(jiǎn)單,但花了不少時(shí)間來(lái)布局。

核心代碼講解:

三個(gè)過(guò)程程序都牽涉了Java Socket聊天程序最核心的思想,以下為核心的講解。

1.服務(wù)器

Java Socket服務(wù)器端需要引入兩個(gè)包,java.io包和java.net包,io包是解決輸入輸出流的問(wèn)題,而net包包含了socket編程所需的API.服務(wù)器端首先要得到ServerSocket的對(duì)象,即ServerSocket ss = new ServerSocket(5555); 5555為服務(wù)器端的端口號(hào)。Socket s = ss.accept();服務(wù)器端Socket對(duì)象通過(guò)accept()方法開(kāi)始監(jiān)聽(tīng)鏈接過(guò)來(lái)的客戶(hù)端信息。如果有客戶(hù)端有信息過(guò)來(lái),則對(duì)象s調(diào)用輸入輸出流的方法,如s.getInputStream(),同時(shí)把得到的InputStream 封裝在DataInputStream當(dāng)中,在客戶(hù)端與服務(wù)器端通信時(shí),有可能兩端存在于不同的操作系統(tǒng),封裝在DataInputStream可以很好的解決這個(gè)問(wèn)題。

2.客戶(hù)端

其實(shí)客戶(hù)端代碼與服務(wù)器端大多類(lèi)似,有一點(diǎn)顯著不同,在客戶(hù)端沒(méi)有ServerSocket類(lèi),即客戶(hù)端不用監(jiān)聽(tīng)任何鏈接,他只需要發(fā)送鏈接即可。Socket s = new Socket(String IPAddr,int port),IPAddr為服務(wù)器端的IP地址,port為服務(wù)器端的端口號(hào)即5555,由于本程序服務(wù)器端和客戶(hù)端在同一主機(jī)上,所以服務(wù)器端IP地址為127.0.0.1。通過(guò)IPAddr和port兩個(gè)參數(shù)就可以得到Java Socket聊天程序?qū)ο髎,接下來(lái)的步驟就和服務(wù)器程序類(lèi)似了。

對(duì)三個(gè)過(guò)程程序的詳解

Procedure1:服務(wù)器端核心代碼如下:

  1. ServerSocket ss = new ServerSocket(5555);  

  2. Socket s = ss.accept();  

  3. OutputStream os = s.getOutputStream();  

  4. DataOutputStream dos = new DataOutputStream(os);  

  5. InputStream is = s.getInputStream();  

  6. DataInputStream dis = new DataInputStream(is);  

  7. InputStreamReader isr = new InputStreamReader(System.in);
     //重鍵盤(pán)讀入數(shù)據(jù)  

  8. BufferedReader br = new BufferedReader(isr); 
    //把從鍵盤(pán)讀入的數(shù)據(jù)放入緩沖  

  9. String info;  

  10. while(true){  

  11. info = dis.readUTF();   

  12. System.out.println("客戶(hù)端說(shuō):" + info);  

  13. if(info.equals("goodbye")){  

  14. break;  

  15. }  

  16. info = br.readLine();  

  17. dos.writeUTF(info);  

  18. System.out.println("服務(wù)器說(shuō):" + info);  

  19. if(info.equals("goodbye")){  

  20. break;  

  21. }  

客戶(hù)端核心代碼如下:

Socket s = new Socket("127.0.0.1",5555);  InputStream is = s.getInputStream();  DataInputStream dis = new DataInputStream(is);  OutputStream os = s.getOutputStream();  DataOutputStream dos = new DataOutputStream(os);  InputStreamReader isr = new InputStreamReader(System.in);   BufferedReader br = new BufferedReader(isr);  String info;  while(true){  info = br.readLine();  System.out.println("客戶(hù)端說(shuō)的是:" + info);  dos.writeUTF(info);  if(info.equals("goodbye")){  break;  }  info = dis.readUTF(); //阻塞函數(shù)  System.out.println("服務(wù)器端說(shuō)的是:" + info);  if(info.equals("goodbye")){  break;  }  }

服務(wù)器端和客戶(hù)端在while(true)循環(huán)處各不相同,服務(wù)器端是dis.readUTF(),必須首先讀取客戶(hù)端傳過(guò)來(lái)的信息,才能通過(guò)info = br.readLine();dos.writeUTF(info);從鍵盤(pán)中讀取信息再發(fā)送給客戶(hù)端。相反,客戶(hù)端必須首先通過(guò)br.readLine();讀取鍵盤(pán)信息,才能接收服務(wù)器發(fā)送來(lái)的信息。

思考1:這個(gè)簡(jiǎn)易的聊天程序已經(jīng)實(shí)現(xiàn)了服務(wù)器和客戶(hù)端的信息交互,但此時(shí)已經(jīng)出現(xiàn)了一個(gè)必然出現(xiàn)的問(wèn)題,比如拿服務(wù)器端來(lái)講,當(dāng)服務(wù)器通過(guò)dos.writeUTF(info)發(fā)送消息給客戶(hù)端后,在while循環(huán)體內(nèi),他又要執(zhí)行info = dis.readUTF()代碼,而readUTF()是一個(gè)阻塞函數(shù),如果客戶(hù)端沒(méi)有發(fā)送過(guò)來(lái),他就阻塞在那個(gè)地方,此時(shí)下面部分的代碼dos.writeUTF(info)就不能執(zhí)行,即服務(wù)器端不能發(fā)送消息出去。

Java Socket聊天程序要怎樣解決這個(gè)問(wèn)題呢?怎樣readUTF()阻塞的同時(shí)又可以writeUTF(info)發(fā)送出消息呢?顯然,一條路徑走不通時(shí)應(yīng)該考慮走另一條路,于是,多線(xiàn)程在這里引入了。Procedure2就是這樣出來(lái)的。

關(guān)于如何理解Java Socket聊天程序核心代碼問(wèn)題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒(méi)有解開(kāi),可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。


文章名稱(chēng):如何理解JavaSocket聊天程序核心代碼
當(dāng)前路徑:http://weahome.cn/article/jedcps.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部