简单的两操作数计算器实现(基于Java网络编程)

2023-10-27

客户端代码实现

import java.io.*;
import java.net.*;
import java.util.Scanner;
/*
     (1)   已知client端,提交计算表达式请求,如:3+4
     (2)在server服务器端完成运算并将结果返回给client端
     (3)使用TCP/IP的套接字编程完成程序
     (4)能反复运算
*/
public class Client {
	public static void main(String args[]) {
		Scanner s=new Scanner(System.in);
//		创建键盘接收器对象
		int mess1= 0;
		char me=0;
		int mess2=0;
		Socket mysocket;
//		Socket类实现客户端套接字
		DataInputStream in=null;
//		读取服务器的回答的io流
		DataOutputStream out=null;
//		向服务器提问的io流
		try {
			mysocket=new Socket("127.0.0.1",2010);
//			端口号是服务器端与客户端链接的通路标志,通过端口号与服务器建立连接
			in=new DataInputStream(mysocket.getInputStream());
//			注意DataInputStream的创建
			out=new DataOutputStream(mysocket.getOutputStream());
//			注意DataOutputStream的创建
			while(true) {
				System.out.println("请输入您要计算的式子:");
				mess1=s.nextInt();
				me=(char)s.next().charAt(0);
				mess2=s.nextInt();
				out.writeInt(mess1);
				out.writeChar(me);
				out.writeInt(mess2);
				int answer=in.readInt();
//				读取信息,堵塞状态
				System.out.println("客户收到服务的回答:"+answer);
			}
		}catch(Exception e) {
			System.out.println("服务器已断开"+e);
		};
	}
}

服务器端代码实现

import java.io.*;
import java.net.*;
//当用到网络编程时要导java.net.*;包

public class Server {
	public static void main(String args[]) {
		int answer=0;
		ServerSocket serverForClient=null;
//		ServerSocket类实现服务器套接字(只有一个用处好像,即申请服务器端口号)
		Socket socketOnServer=null;
//		Socket类实现客户端套接字
		DataOutputStream out=null;
		DataInputStream in=null;
		try {
			serverForClient =new ServerSocket(2010);
//			端口号是服务器端与客户端链接的通路标志,设置服务器端口号
		}catch(IOException e) {
			//如果端口号已经被占用,将触发异常
			System.out.println(e);
		}

		try {
			System.out.println("等待客户呼叫");
			socketOnServer=serverForClient.accept();
//			堵塞状态——等待客户端访问,获得客户端地址
			System.out.println("客户的地址:"+socketOnServer.getInetAddress());
//			输出客户端的地址
			out=new DataOutputStream(socketOnServer.getOutputStream());
			in=new DataInputStream(socketOnServer.getInputStream());
			while(true) {
				int s1=in.readInt();
//				in读取信息,堵塞状态
				char u=in.readChar();
				int s2=in.readInt();
				System.out.println("服务器收到客户的提问:"+s1+u+s2);
				switch(u) {
					case '*':answer=s1*s2;break;
					case '/':answer=s1/s2;break;
					case '+':answer=s1+s2;break;
					case '-':answer=s1-s2;break;
					case '%':answer=s1%s2;break;
				}
				out.writeInt(answer);
			}
		}catch(Exception e) {
			System.out.println("客户已断开"+e);
		}
	}
}

 测试算式输入格式

import java.util.Scanner;

//测试输入方式————>输入10 + 10(数与运算符之间要有空隔间隔)
public class test {
	public static void main(String args[]) {
		Scanner s=new Scanner(System.in);
		int s1=s.nextInt();
		char ms=s.next().charAt(0);
		int s2=s.nextInt();

		System.out.println(s1+"\n"+ms+"\n"+s2);
	}
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

简单的两操作数计算器实现(基于Java网络编程) 的相关文章

随机推荐

  • jdbc的练习:建立一个连接数据库的类

    import java sql public class DatabaseConnection String driver com mysql jdbc Driver String url jdbc mysql localhost 3306
  • 【Pytorch深度学习实战】(8)双向循环神经网络(BiRNN)

    大家好 我是Sonhhxg 柒 希望你看完之后 能对你有所帮助 不足请指正 共同学习交流 个人主页 Sonhhxg 柒的博客 CSDN博客 欢迎各位 点赞 收藏 留言 系列专栏 机器学习 ML 自然语言处理 NLP 深度学习 DL fore
  • c语言:char *c;测试

    include
  • html图片列表选择器,CSS 列表

    CSS 列表 从某种意义上讲 不是描述性的文本的任何内容都可以认为是列表 人口普查 太阳系 家谱 参观菜单 甚至你的所有朋友都可以表示为一个列表或者是列表的列表 由于列表如此多样 这使得列表相当重要 所以说 CSS 中列表样式不太丰富确实是
  • Laravel 图片不显示解决方案

    转自 https blog csdn net qq 18951197 article details 93163149 图片文件存储位置为 项目目录 storage app public 1 在项目目录下执行命令创建过软链接 php art
  • ELF文件查看利器之objdump用法

    Android在NDK开发工具中提供了objdump 用来帮助开发者查看编译后目标文件的组成结构和具体内容 常用的有以下几个功能选项 1 a或者 archive headers 这个参数起到的作用和ar命令相似 用来看一个 a静态库文件中包
  • OpenStack--部署nova控制节点与计算节点

    官方部署文档 https docs openstack org mitaka zh CN install guide rdo common get started compute html 1 安装并配置 nova 控制节点 官方安装文档
  • ISP算法学习之LSC(镜头阴影校正)

    LSC Lens Shading Correction 是ISP算法中的一个重要组成部分 用于校正镜头遮挡 lens shading 现象 镜头遮挡是由于镜头和图像传感器的光学特性导致的图像亮度不均匀的现象 通常 图像的中心部分较亮 而边缘
  • 破解软件的原理是什么(软件被破解公开)

    到底魔高一丈吗 还是路的高度是一丈 破解与破解之间就像矛盾和矛盾 从第一个软件上线之日起 这就成为了永恒的话题 即使是牛群也不可避免地破译了自己的软件 这不是技术问题 而是信息化时代的产物 软件基于二进制文件存储在系统中 运行时系统平台必须
  • rsync推拉复制同步脚本编写(详细)内附jenkins通过rsync脚本部署到tomcat

    本处基于saltstack的配置目录里分解rsync的tar包 倒序讲解 root master rsync ls rsyncd tar gz 后两个是推复制rsyncd tui master tar gz rsync tui slave
  • JDBC连接MySQL数据库

    文章目录 前言 一 怎么链接数据库 二 使用步骤 https img blog csdnimg cn 91945baa8c094d48890a557614f46fd7 png x oss process image watermark ty
  • stm32定时器详解

    目录 一 时基配置 定时器定时周期计算 二 捕获 比较通道配置 定时器捕获比较模式说明 三 中断优先级配置 四 开启中断与定时器相关函数 链接 一 时基配置 定时器时基配置主要是配置定时器周期 即分频系数和自动重载寄存器 比如现在我需要配置
  • 土壤湿度计检测模块 土壤湿度传感器 机器人智能小车

    https item taobao com item htm spm a1z09 2 0 0 67002e8dtYpcae id 522556171397 u rklgtpkf6bb 土壤湿度模块是一个简易的水分传感器可用于检测土壤的水分
  • 组件路由传参【vue3】

    大家对于vue3也已经不太陌生了 但是在路由传参中会遇到一点小问题 不知大家是否也遇到过 一起来看一下 首先是我们熟悉的vue路由传参 无非就是个router来进行的操作 首先就是导入vue router 这里一定要导入4版本的 不然vue
  • 文件和注册表的重定向解决方法

    注册表重定向解决办法 转载http www 2cto com os 201411 350858 html 32位程序如何访问64位的注册表 HKLM Software 在调用函数RegCreateKeyEx创建注册表项时 对其第六个参数RE
  • .NET Core 在程序集中集成Razor视图

    前言 有时候 我们在开发一个程序集供其他项目引用的时候 可能需要对外输出一些HTML的结构数据 还有一些情况我们可能开发的是一个中间件 这个中间件需要提供一些界面来对外展示数据或者是内部的一些程序的运行信息 这个时候我们也需要一个界面来做这
  • 电路原理图中的“NC“是什么意思?

    电路原理图中的 NC 是什么意思 1 在看电路原理图的时候 电路原理图上有 NC 我查了下是表示 此处不贴任何电子器件 我看了下实际的电路板确实没贴 那么不贴的话是不是相当于这个位置空出来了 断路 了 就是说芯片的这个引脚在电路中是 悬空状
  • 程序员必知的23种设计模式之享元模式

    文章目录 1 模式引出 展示网站项目需求 1 1 传统方案解决网站展现项目 1 2 传统方案解决网站展现项目 问题分析 2 享元模式基本介绍 2 1 享元模式的原理类图 2 2 内部状态和外部状态 可共享和不可共享 3 方案修改 4 享元模
  • flink维表join的几种方式(1)

    维表join的几种方式 一 将维表预加载到内存关联 实现方式 定义一个类实现RichFlatMapFunction在open 方法中读取全部数据加载到内存中 优缺点 因为存在内存中 所以仅支持小数据量维表 因为open方法中读取 所以维表变
  • 简单的两操作数计算器实现(基于Java网络编程)

    客户端代码实现 import java io import java net import java util Scanner 1 已知client端 提交计算表达式请求 如 3 4 2 在server服务器端完成运算并将结果返回给clie