环境: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. 关联规则—频繁项集Apriori算法

    频繁模式和对应的关联或相关规则在一定程度上刻画了属性条件与类标号之间的有趣联系,因此将关联规则挖掘用于分类也会产生比较好的效果.关联规则就是在给定训练项集上频繁出现的项集与项集之间的一种紧密的联系.其 ...

  2. 排序算法整理(python version)

    import random import time def bubble_sort(a): n=len(a) while n>1: for i in range(n-1): if a[i]> ...

  3. localhost直接访问子文件夹无法完成

    刚装上新版的wamp,之前的改动都初始化了,发现了一个问题,localhost不能直接访问子文件夹了,从网上找了找答案,没费事,解决了. 将WWW目录下的index.php打开,更改里面的内容,更改内 ...

  4. python网络编程基础知识整理

  5. DSP_TMS32F2812的串口操作

    void scia_fifo_init(int ibaud) { SciaRegs.SCICCR.all =0x0007; // 1 stop bit, No loopback // No parit ...

  6. raid功能中spanning和striping模式有什么区别?

    RAID 0 又称为Stripe(条带化,串列)或Striping 它代表了所有RAID级别中最高的存储性能.RAID 0提高存储性能的原理是把连续的数据分散到多个磁盘上存取,这样,系统有数据请求就可 ...

  7. 芝麻HTTP:Flask的安装

    Flask是一个轻量级的Web服务程序,它简单.易用.灵活,这里主要用来做一些API服务. 1. 相关链接 GitHub:https://github.com/pallets/flask 官方文档:h ...

  8. 芝麻HTTP:Scrapy-Splash的安装

    Scrapy-Splash是一个Scrapy中支持JavaScript渲染的工具,本节来介绍它的安装方式. Scrapy-Splash的安装分为两部分.一个是Splash服务的安装,具体是通过Dock ...

  9. BFS-九宫格重排(详解)

    BFS将近两年没练过题了,今天重新回忆下以前刷的蓝桥杯题:九宫格重排 样例输入  //初始状态 //终点状态 样例输出  //最短步数 样例输入  //初始状态 //终点状态 样例输出  //最短步数 ...

  10. 畅通工程再续 HDU - 1875

    相信大家都听说一个"百岛湖"的地方吧,百岛湖的居民生活在不同的小岛中,当他们想去其他的小岛时都要通过划小船来实现.现在政府决定大力发展百岛湖,发展首先要解决的问题当然是交通问题,政 ...