环境:Notpad ++ 6.0 + JDK 6.0.31

问题:使用套接字编写客户—服务器程序,实现客户—服务器交互计算。客户将三角形3个边的长度发给服务器,服务器把计算出的三角形的面积返回给客户。

解决:利用Java的Socket编程。客户端发送数据,服务端接收数据,并进行相应的处理。

代码:

TcpServer.java:

  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

  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编程练习的更多相关文章

  1. Winfrom 基于TCP的Socket 编程

    基于TCP的Socket基础例子 服务端的代码 public partial class Form1 : Form { public Form1() { InitializeComponent(); ...

  2. 网络编程学习笔记(二)基于TCP的Socket编程

    1.Socket:英文意思插座.两个Java应用程序可以通过一个双向的网络通信连接实现数据交换,这个双向链路的一端称为一个Socket. 2.Socket通常用来实现client-server(客户端 ...

  3. 【转/TCP协议编程】 基于TCP的Socket 编程

    基于TCP(面向连接)的socket编程,分为客户端和服务器端. 客户端的流程如下: (1)创建套接字(socket) (2)向服务器发出连接请求(connect) (3)和服务器端进行通信(send ...

  4. Java Web 基础(一) 基于TCP的Socket网络编程

    一.Socket简单介绍 Socket通信作为Java网络通讯的基础内容,集中了异常.I/O流模式等众多知识点.学习Socket通信,既能够了解真正的网络通讯原理,也能够增强对I/O流模式的理解. 1 ...

  5. 网络编程懒人入门(八):手把手教你写基于TCP的Socket长连接

    本文原作者:“水晶虾饺”,原文由“玉刚说”写作平台提供写作赞助,原文版权归“玉刚说”微信公众号所有,即时通讯网收录时有改动. 1.引言 好多小白初次接触即时通讯(比如:IM或者消息推送应用)时,总是不 ...

  6. Python进阶(1)_Socket网络编程(基于tcp的socket)

    网络协议参考:http://www.cnblogs.com/hedeyong/p/6889774.html 一.TCP/IP五层模型 学习socket一定要先学习互联网协议: 1.首先:本节课程的目标 ...

  7. Python网络编程03 /缓存区、基于TCP的socket循环通信、执行远程命令、socketserver通信

    Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命令.socketserver通信 目录 Python网络编程03 /缓存区.基于TCP的socket循环通信.执行远程命 ...

  8. (1)线程的同步机制 (2)网络编程的常识 (3)基于tcp协议的编程模型

    1.线程的同步机制(重点)1.1 基本概念 当多个线程同时访问同一种共享资源时可能会造成数据的覆盖和不一致等问题,此时就需要对线程之间进行协调和通信,该方式就叫线程的同步机制. 如: 2003年左右 ...

  9. (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制

    1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...

随机推荐

  1. UVA-818 dfs + 位运算

    暴力枚举一些圆环,将这些圆环解开,看能否成为单链.判断单链的三个条件: 除了这些删除的圆环之外,其他圆环还连接着的圆环不能超过两个. 剩下的环没有连成圈. 剩下的圆环共分成m堆,每堆之间无连接,m必须 ...

  2. OpenCV 之 空间滤波

    1  空间滤波 1.1  基本概念 空间域,在图像处理中,指的是像平面本身: 空间滤波,则是在像平面内,对像素值所进行的滤波处理. 如上图所示,假设点 (x, y) 为图像 f 中的任意点,中间正方形 ...

  3. python如何使用pymysql模块

    Python 3.x 操作MySQL的pymysql模块详解 前言pymysql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而M ...

  4. webTest-----webUI自动化框架

    webTest框架介绍 地址 https://github.com/wuranxu/webTest 希望大家能够喜欢!!! 简介 本框架基于Python3+selenium3+unittest组成,用 ...

  5. 在JDBC中使用Java8的日期LocalDate、LocalDateTime

    在实体Entity里面,可以使用java.sql.Date.java.sql.Timestamp.java.util.Date来映射到数据库的date.timestamp.datetime等字段 但是 ...

  6. 腾讯云+校园扶持计划是bug还是福利

    前言   上午突然收到好友的微信消息.打开一看是关于关腾讯云"云+校园扶持计划".仔细看下了意思就是用户可以花360大洋购买腾讯云服务器配置为1核2G,1M带宽的服务器3年.(腾讯 ...

  7. 3.3 与Cache相关的PCI总线事务

    PCI总线规范定义了一系列与Cache相关的总线事务,以提高PCI设备与主存储器进行数据交换的效率,即DMA读写的效率.当PCI设备使用DMA方式向存储器进行读写操作时,一定需要经过HOST主桥,而H ...

  8. 好用的Markdown编辑器汇总

    Markdown 是一种简单的.轻量级的标记语法.用户可以使用诸如 * # 等简单的标记符号以最小的输入代价生成极富表现力的文档. Markdown具有很多优点: 写作中添加简单符号即完成排版,所见即 ...

  9. mysql字符串连接

    用SQL Server 连接字符串是用“+” 现在数据库用mysql, 写个累加两个字段值SQL语句居然不支持"+",郁闷了半天在网上查下,才知道mysql里的+是数字相加的操作, ...

  10. PCI设备内存操作函数总结

    1.  ExAllocatePool() 函数说明: ExAllocatePool allocates pool memory of the specified type and returns a ...