Java基于TCP的Socket编程练习

Posted 慧心的眼眸

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java基于TCP的Socket编程练习相关的知识,希望对你有一定的参考价值。

环境: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.   
  6. public class TcpServer {  
  7.     public static final int NUM = 3;  
  8.     public static void main(String args[]){  
  9.           
  10.         TcpServer tcpServer = new TcpServer();  
  11.         try {  
  12.             ServerSocket server = null;  
  13.               
  14.             try {  
  15.                 server = new ServerSocket(4700);  
  16.             } catch (Exception e) {  
  17.                 e.printStackTrace();  
  18.             }  
  19.               
  20.             Socket socket = null;  
  21.             try {  
  22.                 socket = server.accept();  
  23.             } catch (Exception e) {  
  24.                 e.printStackTrace();  
  25.             }  
  26.               
  27.             String line = "";  
  28.             double a[] = new double[NUM];  
  29.             BufferedReader is = new BufferedReader(new InputStreamReader  
  30.                     (socket.getInputStream()));  
  31.               
  32.             System.out.println("从客户端接收三角形的三条边:");  
  33.             for (int i = 0; i < a.length; i++) {  
  34.                 line = is.readLine();  
  35.                 a[i] = Double.parseDouble(line);  
  36.             }  
  37.               
  38.               
  39.             System.out.println("三角形的面积是:" + tcpServer.countarea(a));  
  40.               
  41.             is.close();//关闭读取流  
  42.             socket.close();//关闭Socket  
  43.             server.close();//关闭ServerSocket  
  44.         } catch (Exception e) {  
  45.             e.printStackTrace();  
  46.         }  
  47.     }  
  48.       
  49.       
  50.     //计算三角形面积的方法  
  51.     public double countarea(double a[]){  
  52.         double area = 0.0;  
  53.           
  54.         double temp = 0.0;  
  55.         double aside = 0.0;  
  56.         double bside = 0.0;  
  57.         double cside = 0.0;  
  58.         aside = a[0];  
  59.         bside = a[1];  
  60.         cside = a[2];  
  61.         temp = a[0] + a[1] + a[2];  
  62.         temp = temp / 2;  
  63.           
  64.           
  65.           
  66.         area = Math.sqrt(temp * (temp - aside) * (temp - bside) * (temp - cside));  
  67.           
  68.         return area;  
  69.     }  
  70. }  


 

 

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.       
  7.     public static final int NUM = 3;  
  8.     public static void main(String args[]){  
  9.         try {  
  10.             Socket socket = new Socket("127.0.0.1", 4700);  
  11.             BufferedReader sin = new BufferedReader(new InputStreamReader(System.in));  
  12.               
  13.             PrintWriter os = new PrintWriter(socket.getOutputStream());  
  14.               
  15.             System.out.println("从客户端接收三角形的三条边发送到服务器:");  
  16.             System.out.println("请输入3条边:");  
  17.             String readline = "";  
  18.             for (int i = 0; i < NUM; i++) {  
  19.                 os.flush();  
  20.                 readline = sin.readLine();  
  21.                 os.println(readline);  
  22.             }  
  23.               
  24.             os.close();  
  25.             socket.close();  
  26.               
  27.         } catch (Exception e) {  
  28.             e.printStackTrace();  
  29.         }  
  30.     }  
  31.       
  32. }  


 

 

运行:

把客户端程序(TcpClient.java)和服务端程序(TcpServer.java)分别编译,再打开两个Cmd控制台,先运行服务端,再运行客户端,在客户端输入数据,然后就可以在服务端看到结果。

 

运行效果截图:

服务端:

技术分享图片

 

客户端:

技术分享图片

资源下载 :www.makeru.com.cn/?t=12


以上是关于Java基于TCP的Socket编程练习的主要内容,如果未能解决你的问题,请参考以下文章

java 26 - 8 网络编程之 TCP协议的练习

网络编程--02 TCP

Java自用TCP网络编程练习题

Linux下基于TCP协议的群聊系统设计(多线程+select)

Java网络编程基础-- 基于TCP/IP的Socket编程

python网络编程课后练习