1. 程式人生 > >Java基於TCP的Socket編程練習

Java基於TCP的Socket編程練習

net sin oar servers nbsp number 資源 tis trace

環境:Notpad ++ 6.0 + JDK 6.0.31

問題:使用套接字編寫客戶—服務器程序,實現客戶—服務器交互計算。客戶將三角形3個邊的長度發給服務器,服務器把計算出的三角形的面積返回給客戶。

解決:利用Java的Socket編程。客戶端發送數據,服務端接收數據,並進行相應的處理。

代碼:

TcpServer.java:

[java] view plain copy
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.net.ServerSocket;
  4. import java.net.Socket;
  5. public class TcpServer {
  6. public static final int NUM = 3;
  7. public static void main(String args[]){
  8. TcpServer tcpServer = new TcpServer();
  9. try {
  10. ServerSocket server = null;
  11. try {
  12. server = new ServerSocket(4700);
  13. } catch (Exception e) {
  14. e.printStackTrace();
  15. }
  16. Socket socket = null;
  17. try {
  18. socket = server.accept();
  19. } catch (Exception e) {
  20. e.printStackTrace();
  21. }
  22. String line = "";
  23. double a[] = new double[NUM];
  24. BufferedReader is = new BufferedReader(new InputStreamReader
  25. (socket.getInputStream()));
  26. System.out.println("從客戶端接收三角形的三條邊:");
  27. for (int i = 0; i < a.length; i++) {
  28. line = is.readLine();
  29. a[i] = Double.parseDouble(line);
  30. }
  31. System.out.println("三角形的面積是:" + tcpServer.countarea(a));
  32. is.close();//關閉讀取流
  33. socket.close();//關閉Socket
  34. server.close();//關閉ServerSocket
  35. } catch (Exception e) {
  36. e.printStackTrace();
  37. }
  38. }
  39. //計算三角形面積的方法
  40. public double countarea(double a[]){
  41. double area = 0.0;
  42. double temp = 0.0;
  43. double aside = 0.0;
  44. double bside = 0.0;
  45. double cside = 0.0;
  46. aside = a[0];
  47. bside = a[1];
  48. cside = a[2];
  49. temp = a[0] + a[1] + a[2];
  50. temp = temp / 2;
  51. area = Math.sqrt(temp * (temp - aside) * (temp - bside) * (temp - cside));
  52. return area;
  53. }
  54. }


TcpClient.java

[java] view plain copy
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.io.PrintWriter;
  4. import java.net.Socket;
  5. public class TcpClient {
  6. public static final int NUM = 3;
  7. public static void main(String args[]){
  8. try {
  9. Socket socket = new Socket("127.0.0.1", 4700);
  10. BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));
  11. PrintWriter os = new PrintWriter(socket.getOutputStream());
  12. System.out.println("從客戶端接收三角形的三條邊發送到服務器:");
  13. System.out.println("請輸入3條邊:");
  14. String readline = "";
  15. for (int i = 0; i < NUM; i++) {
  16. os.flush();
  17. readline = sin.readLine();
  18. os.println(readline);
  19. }
  20. os.close();
  21. socket.close();
  22. } catch (Exception e) {
  23. e.printStackTrace();
  24. }
  25. }
  26. }


運行:

把客戶端程序(TcpClient.java)和服務端程序(TcpServer.java)分別編譯,再打開兩個Cmd控制臺,先運行服務端,再運行客戶端,在客戶端輸入數據,然後就可以在服務端看到結果。

運行效果截圖:

服務端:

技術分享圖片

客戶端:

技術分享圖片

資源下載 :www.makeru.com.cn/?t=12

Java基於TCP的Socket編程練習