java網(wǎng)絡(luò)編程之簡單客戶端服務(wù)器

上傳人:xins****2008 文檔編號:199639084 上傳時間:2023-04-11 格式:DOC 頁數(shù):10 大?。?90KB
收藏 版權(quán)申訴 舉報 下載
java網(wǎng)絡(luò)編程之簡單客戶端服務(wù)器_第1頁
第1頁 / 共10頁
java網(wǎng)絡(luò)編程之簡單客戶端服務(wù)器_第2頁
第2頁 / 共10頁
java網(wǎng)絡(luò)編程之簡單客戶端服務(wù)器_第3頁
第3頁 / 共10頁

下載文檔到電腦,查找使用更方便

10 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《java網(wǎng)絡(luò)編程之簡單客戶端服務(wù)器》由會員分享,可在線閱讀,更多相關(guān)《java網(wǎng)絡(luò)編程之簡單客戶端服務(wù)器(10頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、用Java開發(fā)網(wǎng)絡(luò)軟件非常方便和強大,Java的這種力量來源于他獨有的一套強大的用于網(wǎng)絡(luò)的 API,這些API是一系列的類和接口,均位于包和中。在這篇文章中我們將介紹套接字(Socket)慨念,同時以實例說明如何使用Network API操縱套接字,在完成本文后,你就可以編寫網(wǎng)絡(luò)低端通訊軟件。 什么是套接字(Socket)? Network API是典型的用于基于TCP/IP網(wǎng)絡(luò)Java程序與其他程序通訊,Network API依靠Socket進(jìn)行通訊。Socket可以看成在兩個程序進(jìn)行通訊連接中的一個端點,一個程序?qū)⒁欢涡畔懭隨ocket中,該Socket將這段信息發(fā)送給另外一個Soc

2、ket中,使這段信息能傳送到其他程序中。如圖1 我們來分析一下圖1,Host A上的程序A將一段信息寫入Socket中,Socket的內(nèi)容被Host A的網(wǎng)絡(luò)管理軟件訪問,并將這段信息通過Host A的網(wǎng)絡(luò)接口卡發(fā)送到Host B,Host B的網(wǎng)絡(luò)接口卡接收到這段信息后,傳送給Host B的網(wǎng)絡(luò)管理軟件,網(wǎng)絡(luò)管理軟件將這段信息保存在Host B的Socket中,然后程序B才能在Socket中閱讀這段信息。 假設(shè)在圖1的網(wǎng)絡(luò)中添加第三個主機Host C,那么Host A怎么知道信息被正確傳送到Host B而不是被傳送到Host C中了呢?基于TCP/IP網(wǎng)絡(luò)中的每一個主機均被賦予了一個

3、唯一的IP地址,IP地址是一個32位的無符號整數(shù),由于沒有轉(zhuǎn)變成二進(jìn)制,因此通常以小數(shù)點分隔,如:198.163.227.6,正如所見IP地址均由四個部分組成,每個部分的范圍都是0-255,以表示8位地址。 值得注意的是IP地址都是32位地址,這是IP協(xié)議版本4(簡稱Ipv4)規(guī)定的,目前由于IPv4地址已近耗盡,所以IPv6地址正逐漸代替Ipv4地址,Ipv6地址則是128位無符號整數(shù)。 假設(shè)第二個程序被加入圖1的網(wǎng)絡(luò)的Host B中,那么由Host A傳來的信息如何能被正確的傳給程序B而不是傳給新加入的程序呢?這是因為每一個基于TCP/IP網(wǎng)絡(luò)通訊的程序都被賦予了唯一的端口和端口號,端

4、口是一個信息緩沖區(qū),用于保留Socket中的輸入/輸出信息,端口號是一個16位無符號整數(shù),范圍是0-65535,以區(qū)別主機上的每一個程序(端口號就像房屋中的房間號),低于256的短口號保留給標(biāo)準(zhǔn)應(yīng)用程序,比如pop3的端口號就是110,每一個套接字都組合進(jìn)了IP地址、端口、端口號,這樣形成的整體就可以區(qū)別每一個套接字t,下面我們就來談?wù)剝煞N套接字:流套接字和自尋址數(shù)據(jù)套接字。 流套接字(Stream Socket) 無論何時,在兩個網(wǎng)絡(luò)應(yīng)用程序之間發(fā)送和接收信息時都需要建立一個可靠的連接,流套接字依靠TCP協(xié)議來保證信息正確到達(dá)目的地,實際上,IP包有可能在網(wǎng)絡(luò)中丟失或者在傳送過程中發(fā)生錯

5、誤,任何一種情況發(fā)生,作為接受方的 TCP將聯(lián)系發(fā)送方TCP重新發(fā)送這個IP包。這就是所謂的在兩個流套接字之間建立可靠的連接。 流套接字在C/S程序中扮演一個必需的角色,客戶機程序(需要訪問某些服務(wù)的網(wǎng)絡(luò)應(yīng)用程序)創(chuàng)建一個扮演服務(wù)器程序的主機的IP地址和服務(wù)器程序(為客戶端應(yīng)用程序提供服務(wù)的網(wǎng)絡(luò)應(yīng)用程序)的端口號的流套接字對象。 客戶端流套接字的初始化代碼將IP地址和端口號傳遞給客戶端主機的網(wǎng)絡(luò)管理軟件,管理軟件將IP地址和端口號通過NIC傳遞給服務(wù)器端主機;服務(wù)器端主機讀到經(jīng)過NIC傳遞來的數(shù)據(jù),然后查看服務(wù)器程序是否處于監(jiān)聽狀態(tài),這種監(jiān)聽依然是通過套接字和端口來進(jìn)行的;如果服務(wù)器程序處

6、于監(jiān)聽狀態(tài),那么服務(wù)器端網(wǎng)絡(luò)管理軟件就向客戶機網(wǎng)絡(luò)管理軟件發(fā)出一個積極的響應(yīng)信號,接收到響應(yīng)信號后,客戶端流套接字初始化代碼就給客戶程序建立一個端口號,并將這個端口號傳遞給服務(wù)器程序的套接字(服務(wù)器程序?qū)⑹褂眠@個端口號識別傳來的信息是否是屬于客戶程序)同時完成流套接字的初始化。 如果服務(wù)器程序沒有處于監(jiān)聽狀態(tài),那么服務(wù)器端網(wǎng)絡(luò)管理軟件將給客戶端傳遞一個消極信號,收到這個消極信號后,客戶程序的流套接字初始化代碼將拋出一個異常對象并且不建立通訊連接,也不創(chuàng)建流套接字對象。這種情形就像打電話一樣,當(dāng)有人的時候通訊建立,否則電話將被掛起。 這部分的工作包括了相關(guān)聯(lián)的三個類:InetAddress,

7、 Socket, 和 ServerSocket。 InetAddress對象描繪了32位或128位IP地址,Socket對象代表了客戶程序流套接字,ServerSocket代表了服務(wù)程序流套接字,所有這三個類均位于包中。 InetAddress類 InetAddress類在網(wǎng)絡(luò)API套接字編程中扮演了一個重要角色。參數(shù)傳遞給流套接字類和自尋址套接字類構(gòu)造器或非構(gòu)造器方法。InetAddress描述了32位或64位IP地址,要完成這個功能,InetAddress類主要依靠兩個支持類Inet4Address 和 Inet6Address,這三個類是繼承關(guān)系,InetAddrress是父類,In

8、et4Address 和 Inet6Address是子類。 由于InetAddress類只有一個構(gòu)造函數(shù),而且不能傳遞參數(shù),所以不能直接創(chuàng)建InetAddress對象,比如下面的做法就是錯誤的: InetAddress ia = new InetAddress (); 但我們可以通過下面的5個工廠方法創(chuàng)建來創(chuàng)建一個InetAddress對象或InetAddress數(shù)組: . getAllByName(String host)方法返回一個InetAddress對象的引用,每個對象包含一個表示相應(yīng)主機名的單獨的IP地址,這個IP地址是通過host參數(shù)傳遞的,對于指定的主機如果沒有IP地址存

9、在那么這個方法將拋出一個UnknownHostException 異常對象。 . getByAddress(byte [] addr)方法返回一個InetAddress對象的引用,這個對象包含了一個Ipv4地址或Ipv6地址,Ipv4地址是一個4字節(jié)數(shù)組,Ipv6地址是一個16字節(jié)地址數(shù)組,如果返回的數(shù)組既不是4字節(jié)的也不是16字節(jié)的,那么方法將會拋出一個UnknownHostException異常對象。 . getByAddress(String host, byte [] addr)方法返回一個InetAddress對象的引用,這個InetAddress對象包含了一個由host和4字節(jié)

10、的addr數(shù)組指定的IP地址,或者是host和16字節(jié)的addr數(shù)組指定的IP地址,如果這個數(shù)組既不是4字節(jié)的也不是16位字節(jié)的,那么該方法將拋出一個UnknownHostException異常對象。 . getByName(String host)方法返回一個InetAddress對象,該對象包含了一個與host參數(shù)指定的主機相對應(yīng)的IP地址,對于指定的主機如果沒有IP地址存在,那么方法將拋出一個UnknownHostException異常對象。 . getLocalHost()方法返回一個InetAddress對象,這個對象包含了本地機的IP地址,考慮到本地主機既是客戶程序主機又是服務(wù)

11、器程序主機,為避免混亂,我們將客戶程序主機稱為客戶主機,將服務(wù)器程序主機稱為服務(wù)器主機。 上面講到的方法均提到返回一個或多個InetAddress對象的引用,實際上每一個方法都要返回一個或多個Inet4Address/Inet6Address對象的引用,調(diào)用者不需要知道引用的子類型,相反調(diào)用者可以使用返回的引用調(diào)用InetAddress對象的非靜態(tài)方法,包括子類型的多態(tài)以確保重載方法被調(diào)用。 InetAddress和它的子類型對象處理主機名到主機IPv4或IPv6地址的轉(zhuǎn)換,要完成這個轉(zhuǎn)換需要使用域名系統(tǒng),下面的代碼示范了如何通過調(diào)用getByName(String host)方法獲得In

12、etAddress子類對象的方法,這個對象包含了與host參數(shù)相對應(yīng)的IP地址: InetAddress ia = InetAddress.getByName ("")); 一但獲得了InetAddress子類對象的引用就可以調(diào)用InetAddress的各種方法來獲得InetAddress子類對象中的IP地址信息,比如,可以通過調(diào)用getCanonicalHostName()從域名服務(wù)中獲得標(biāo)準(zhǔn)的主機名;getHostAddress()獲得IP地址,getHostName()獲得主機名,isLoopbackAddress()判斷IP地址是否是一個loopback地址。 Socket類

13、當(dāng)客戶程序需要與服務(wù)器程序通訊的時候,客戶程序在客戶機創(chuàng)建一個socket對象,Socket類有幾個構(gòu)造函數(shù)。兩個常用的構(gòu)造函數(shù)是 Socket(InetAddress addr, int port) 和 Socket(String host, int port),兩個構(gòu)造函數(shù)都創(chuàng)建了一個基于Socket的連接服務(wù)器端流套接字的流套接字。對于第一個InetAddress子類對象通過addr參數(shù)獲得服務(wù)器主機的IP地址,對于第二個函數(shù)host參數(shù)包被分配到InetAddress對象中,如果沒有IP地址與host參數(shù)相一致,那么將拋出UnknownHostException異常對象。兩個函數(shù)都通過

14、參數(shù)port獲得服務(wù)器的端口號。假設(shè)已經(jīng)建立連接了,網(wǎng)絡(luò)API將在客戶端基于Socket的流套接字中捆綁客戶程序的IP地址和任意一個端口號,否則兩個函數(shù)都會拋出一個IOException對象。 如果創(chuàng)建了一個Socket對象,那么它可能通過調(diào)用Socket的 getInputStream()方法從服務(wù)程序獲得輸入流讀傳送來的信息,也可能通過調(diào)用Socket的 getOutputStream()方法獲得輸出流來發(fā)送消息。在讀寫活動完成之后,客戶程序調(diào)用close()方法關(guān)閉流和流套接字,下面的代碼創(chuàng)建了一個服務(wù)程序主機地址為198.163.227.6,端口號為13的Socket對象,然后從這個

15、新創(chuàng)建的Socket對象中讀取輸入流,然后再關(guān)閉流和Socket對象。 Socket s = new Socket ("198.163.227.6", 13); InputStream is = s.getInputStream (); // Read from the stream. is.close (); s.close (); ServerSocket類 由于SSClient使用了流套接字,所以服務(wù)程序也要使用流套接字。這就要創(chuàng)建一個ServerSocket對象,ServerSocket有幾個構(gòu)造函數(shù),最簡單的是ServerSocket(int port),當(dāng)使用Serv

16、erSocket(int port)創(chuàng)建一個ServerSocket對象,port參數(shù)傳遞端口號,這個端口就是服務(wù)器監(jiān)聽連接請求的端口,如果在這時出現(xiàn)錯誤將拋出IOException異常對象,否則將創(chuàng)建ServerSocket對象并開始準(zhǔn)備接收連接請求。 接下來服務(wù)程序進(jìn)入無限循環(huán)之中,無限循環(huán)從調(diào)用ServerSocket的accept()方法開始,在調(diào)用開始后accept()方法將導(dǎo)致調(diào)用線程阻塞直到連接建立。在建立連接后accept()返回一個最近創(chuàng)建的Socket對象,該Socket對象綁定了客戶程序的IP地址或端口號。 由于存在單個服務(wù)程序與多個客戶程序通訊的可能,所以服務(wù)程序響

17、應(yīng)客戶程序不應(yīng)該花很多時間,否則客戶程序在得到服務(wù)前有可能花很多時間來等待通訊的建立,然而服務(wù)程序和客戶程序的會話有可能是很長的(這與電話類似),因此為加快對客戶程序連接請求的響應(yīng),典型的方法是服務(wù)器主機運行一個后臺線程,這個后臺線程處理服務(wù)程序和客戶程序的通訊。 下面給出一個客戶端和服務(wù)器的程序,客戶端向服務(wù)器發(fā)送數(shù)據(jù),服務(wù)器接收數(shù)據(jù)并用它生成一個結(jié)果,然后將結(jié)果返回給客戶端,并在控制臺上顯示。 服務(wù)器代碼 [java] 1. package?Server;?? 2. ?? 3. import?java.io.*;?? 4. import?.*;?? 5. import?j

18、ava.util.*;?? 6. import?java.awt.*;?? 7. import?javax.swing.*;?? 8. ?? 9. public?class?Server?extends?JFrame?{?? 10. ??//?Text?area?for?displaying?contents?? 11. ??private?JTextArea?jta?=?new?JTextArea();?? 12. ?? 13. ??public?static?void?main(String[]?args)?{?? 14. ????new?Server();?? 15.

19、 ??}?? 16. ?? 17. ??public?Server()?{?? 18. ????//?Place?text?area?on?the?frame?? 19. ????getContentPane().setLayout(new?BorderLayout());?? 20. ????getContentPane().add(new?JScrollPane(jta),?BorderLayout.CENTER);?? 21. ?? 22. ????setTitle("Server");?? 23. ????setSize(500,?300);?? 24. ????se

20、tDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);?? 25. ????setVisible(true);?//?It?is?necessary?to?show?the?frame?here!?? 26. ?? 27. ????try?{?? 28. ??????//?Create?a?server?socket?? 29. ??????ServerSocket?serverSocket?=?new?ServerSocket(8000);?? 30. ??????jta.append("Server?started?at?"?+?new?Da

21、te()?+?'\n');?? 31. ?? 32. ??????//?Listen?for?a?connection?request?? 33. ??????Socket?socket?=?serverSocket.accept();?? 34. ?? 35. ??????//?Create?data?input?and?output?streams?? 36. ??????DataInputStream?inputFromClient?=?new?DataInputStream(?? 37. ????????socket.getInputStream());?? 38. ?

22、?????DataOutputStream?outputToClient?=?new?DataOutputStream(?? 39. ????????socket.getOutputStream());?? 40. ?? 41. ??????while?(true)?{?? 42. ????????//?Receive?radius?from?the?client?? 43. ????????double?radius?=?inputFromClient.readDouble();?? 44. ?? 45. ????????//?Compute?area?? 46. ?????

23、???double?area?=?radius?*?radius?*?Math.PI;?? 47. ?? 48. ????????//?Send?area?back?to?the?client?? 49. ????????outputToClient.writeDouble(area);?? 50. ?? 51. ????????jta.append("Radius?received?from?client:?"?+?radius?+?'\n');?? 52. ????????jta.append("Area?found:?"?+?area?+?'\n');?? 53. ????

24、??}?? 54. ????}?? 55. ????catch(IOException?ex)?{?? 56. ??????System.err.println(ex);?? 57. ????}?? 58. ??}?? 59. }?? 客戶端程序 [java] 1. package?Client;?? 2. ?? 3. import?java.io.*;?? 4. import?.*;?? 5. import?java.awt.*;?? 6. import?java.awt.event.*;?? 7. import?javax.swing.*;?? 8. ?

25、? 9. public?class?Client?extends?JFrame?implements?ActionListener?{?? 10. ??//?Text?field?for?receiving?radius?? 11. ??private?JTextField?jtf?=?new?JTextField();?? 12. ?? 13. ??//?Text?area?to?display?contents?? 14. ??private?JTextArea?jta?=?new?JTextArea();?? 15. ?? 16. ??//?IO?streams?? 1

26、7. ??private?DataOutputStream?outputToServer;?? 18. ??private?DataInputStream?inputFromServer;?? 19. ?? 20. ??public?static?void?main(String[]?args)?{?? 21. ????new?Client();?? 22. ??}?? 23. ?? 24. ??public?Client()?{?? 25. ????//?Panel?p?to?hold?the?label?and?text?field?? 26. ????JPanel?p?

27、=?new?JPanel();?? 27. ????p.setLayout(new?BorderLayout());?? 28. ????p.add(new?JLabel("Enter?radius"),?BorderLayout.WEST);?? 29. ????p.add(jtf,?BorderLayout.CENTER);?? 30. ????jtf.setHorizontalAlignment(JTextField.RIGHT);?? 31. ?? 32. ????getContentPane().setLayout(new?BorderLayout());?? 33.

28、????getContentPane().add(p,?BorderLayout.NORTH);?? 34. ????getContentPane().add(new?JScrollPane(jta),?BorderLayout.CENTER);?? 35. ?? 36. ????jtf.addActionListener(this);?//?Register?listener?? 37. ?? 38. ????setTitle("Client");?? 39. ????setSize(500,?300);?? 40. ????setDefaultCloseOperation(J

29、Frame.EXIT_ON_CLOSE);?? 41. ????setVisible(true);?//?It?is?necessary?to?show?the?frame?here!?? 42. ?? 43. ????try?{?? 44. ??????//?Create?a?socket?to?connect?to?the?server?? 45. ??????Socket?socket?=?new?Socket("localhost",?8000);?? 46. ??????//?Socket?socket?=?new?Socket("130.254.204.36",?800

30、0);?? 47. ??????//?Socket?socket?=?new?Socket("drake.Armstrong.edu",?8000);?? 48. ?? 49. ??????//?Create?an?input?stream?to?receive?data?from?the?server?? 50. ??????inputFromServer?=?new?DataInputStream(?? 51. ????????socket.getInputStream());?? 52. ?? 53. ??????//?Create?an?output?stream?to?

31、send?data?to?the?server?? 54. ??????outputToServer?=?? 55. ????????new?DataOutputStream(socket.getOutputStream());?? 56. ????}?? 57. ????catch?(IOException?ex)?{?? 58. ??????jta.append(ex.toString()?+?'\n');?? 59. ????}?? 60. ??}?? 61. ?? 62. ??public?void?actionPerformed(ActionEvent?e)?{??

32、 63. ????String?actionCommand?=?e.getActionCommand();?? 64. ????if?(e.getSource()?instanceof?JTextField)?{?? 65. ??????try?{?? 66. ????????//?Get?the?radius?from?the?text?field?? 67. ????????double?radius?=?Double.parseDouble(jtf.getText().trim());?? 68. ?? 69. ????????//?Send?the?radius?to?t

33、he?server?? 70. ????????outputToServer.writeDouble(radius);?? 71. ????????outputToServer.flush();?? 72. ?? 73. ????????//?Get?area?from?the?server?? 74. ????????double?area?=?inputFromServer.readDouble();?? 75. ?? 76. ????????//?Display?to?the?text?area?? 77. ????????jta.append("Radius?is?"?

34、+?radius?+?"\n");?? 78. ????????jta.append("Area?received?from?the?server?is?"?? 79. ??????????+?area?+?'\n');?? 80. ??????}?? 81. ??????catch?(IOException?ex)?{?? 82. ????????System.err.println(ex);?? 83. ??????}?? 84. ????}?? 85. ??}?? 86. }?? 運行結(jié)果如下如所 在做一個服務(wù)器服務(wù)多個客戶端時,可以簡單的為買個客戶端創(chuàng)建一

35、個線程。相互獨立的線程和指定的客戶端進(jìn)行通信,每個線程創(chuàng)建數(shù)據(jù)輸入輸出流向客戶端發(fā)送接收數(shù)據(jù)。 多線程服務(wù)器端的代碼如下: [java]? 1. package?MultiThreadServer;?? 2. ?? 3. import?java.io.*;?? 4. import?.*;?? 5. import?java.util.*;?? 6. import?java.awt.*;?? 7. import?javax.swing.*;?? 8. ?? 9. public?class?MultiThreadServer?extends?JFrame?{?? 10. ?

36、?//?Text?area?for?displaying?contents?? 11. ??private?JTextArea?jta?=?new?JTextArea();?? 12. ?? 13. ??public?static?void?main(String[]?args)?{?? 14. ????new?MultiThreadServer();?? 15. ??}?? 16. ?? 17. ??public?MultiThreadServer()?{?? 18. ????//?Place?text?area?on?the?frame?? 19. ????getCont

37、entPane().setLayout(new?BorderLayout());?? 20. ????getContentPane().add(new?JScrollPane(jta),?BorderLayout.CENTER);?? 21. ?? 22. ????setTitle("MultiThreadServer");?? 23. ????setSize(500,?300);?? 24. ????setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);?? 25. ????setVisible(true);?//?It?is?necess

38、ary?to?show?the?frame?here!?? 26. ?? 27. ????try?{?? 28. ??????//?Create?a?server?socket?? 29. ??????ServerSocket?serverSocket?=?new?ServerSocket(8000);?? 30. ??????jta.append("MultiThreadServer?started?at?"?+?new?Date()?+?'\n');?? 31. ?? 32. ??????//?Number?a?client?? 33. ??????int?clientNo

39、?=?1;?? 34. ?? 35. ??????while?(true)?{?? 36. ????????//?Listen?for?a?new?connection?request?? 37. ????????Socket?socket?=?serverSocket.accept();?? 38. ?? 39. ????????//?Display?the?client?number?? 40. ????????jta.append("Starting?thread?for?client?"?+?clientNo?+?? 41. ??????????"?at?"?+?new

40、?Date()?+?'\n');?? 42. ?? 43. ????????//?Find?the?client's?host?name,?and?IP?address?? 44. ????????InetAddress?inetAddress?=?socket.getInetAddress();?? 45. ????????jta.append("Client?"?+?clientNo?+?"'s?host?name?is?"?? 46. ??????????+?inetAddress.getHostName()?+?"\n");?? 47. ????????jta.append

41、("Client?"?+?clientNo?+?"'s?IP?Address?is?"?? 48. ??????????+?inetAddress.getHostAddress()?+?"\n");?? 49. ?? 50. ????????//?Create?a?new?thread?for?the?connection?? 51. ????????HandleAClient?thread?=?new?HandleAClient(socket);?? 52. ?? 53. ????????//?Start?the?new?thread?? 54. ????????thread.

42、start();?? 55. ?? 56. ????????//?Increment?clientNo?? 57. ????????clientNo++;?? 58. ??????}?? 59. ????}?? 60. ????catch(IOException?ex)?{?? 61. ??????System.err.println(ex);?? 62. ????}?? 63. ??}?? 64. ?? 65. ??//?Inner?class?? 66. ??//?Define?the?thread?class?for?handling?new?connection

43、?? 67. ??class?HandleAClient?extends?Thread?{?? 68. ????private?Socket?socket;?//?A?connected?socket?? 69. ?? 70. ????/**?Construct?a?thread?*/?? 71. ????public?HandleAClient(Socket?socket)?{?? 72. ??????this.socket?=?socket;?? 73. ????}?? 74. ?? 75. ????/**?Run?a?thread?*/?? 76. ????publi

44、c?void?run()?{?? 77. ??????try?{?? 78. ????????//?Create?data?input?and?output?streams?? 79. ????????DataInputStream?inputFromClient?=?new?DataInputStream(?? 80. ??????????socket.getInputStream());?? 81. ????????DataOutputStream?outputToClient?=?new?DataOutputStream(?? 82. ??????????socket.get

45、OutputStream());?? 83. ?? 84. ????????//?Continuously?serve?the?client?? 85. ????????while?(true)?{?? 86. ??????????//?Receive?radius?from?the?client?? 87. ??????????double?radius?=?inputFromClient.readDouble();?? 88. ?? 89. ??????????//?Compute?area?? 90. ??????????double?area?=?radius?*?ra

46、dius?*?Math.PI;?? 91. ?? 92. ??????????//?Send?area?back?to?the?client?? 93. ??????????outputToClient.writeDouble(area);?? 94. ?? 95. ??????????jta.append("radius?received?from?client:?"?+?? 96. ????????????radius?+?'\n');?? 97. ??????????jta.append("Area?found:?"?+?area?+?'\n');?? 98. ????????}?? 99. ??????}?? 100. ??????catch(IOException?e)?{?? 101. ????????System.err.println(e);?? 102. ??????}?? 103. ????}?? 104. ??}?? 105. }?? 運行結(jié)果如下:

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!

五月丁香婷婷狠狠色,亚洲日韩欧美精品久久久不卡,欧美日韩国产黄片三级,手机在线观看成人国产亚洲