利用socket网络编程,实现的简易CS计算器

原创 2013年12月03日 15:44:20

包含socket服务端、客户端,实现简易计算器:

1、服务端:

package com.boco.calculatorBySocket.server;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import com.boco.calculatorBySocket.Calculation;
import com.boco.calculatorBySocket.CalculationPojo;

/**
 * 计算器服务端
 * @author Administrator
 *
 */
public class Server {
	
	public static ServerSocket serverSocket;
	
	public Server(){
		try {
			this.serverSocket = new ServerSocket(5678);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public static void main(String[] args) {
		try {
			Server server = new Server();
			while(true){
				Socket client=serverSocket.accept();
				System.out.println(serverSocket.getInetAddress() );
				InputStream is=client.getInputStream();
				ObjectInputStream ois=new ObjectInputStream(is);
				Object o = ois.readObject();
				CalculationPojo pojo = (CalculationPojo) o;
				if(pojo.getWay().equals("end"))
					break;
				int result = Calculation(pojo.getWay(),pojo.getValue1(),pojo.getValue2());
				System.out.println("result  =   "+result);
				OutputStream os=client.getOutputStream();
		        DataOutputStream dos=new DataOutputStream(os);
		        dos.writeInt(result);
		        dos.flush();
			}
		} catch (IOException e) {
			e.printStackTrace();
		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public static int Calculation(String way , int a , int b ){
		Calculation cal = new Calculation();
		if("+".equals(way)){
			return cal.plus(a, b);
		}else if("-".equals(way)){
			return cal.minus(a, b);
		}else if("*".equals(way)){
			return cal.mul(a, b);
		}else if("/".equals(way)){
			return cal.Divide(a, b);
		}else{
			return 63353;
		}
	}


}


2、客户端:

package com.boco.calculatorBySocket.client;

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.boco.calculatorBySocket.CalculationPojo;
/**
 * 计算器客户端
 * @author Administrator
 *
 */
public class Client extends JFrame implements  ActionListener{
	
	
	
	JPanel JPanel_center=new JPanel();
	JPanel JPanel_south=new JPanel();
	
	//JLabel JLabel_add=new JLabel("+");
	String s[]={"+","-","*","/","%"};
	JComboBox ways=new JComboBox(s);
	JLabel JLabel_equal=new JLabel("=");
	JTextField JTextField_num1=new JTextField(10);
	JTextField JTextField_num2=new JTextField(10);
	JTextField JTextField_result=new JTextField(10);
	JButton JButton_cal=new JButton("计算");


	
	public Client(){
		this.getContentPane().add(JPanel_center,BorderLayout.CENTER);
		this.getContentPane().add(JPanel_south,BorderLayout.SOUTH);
		JPanel_center.add(JTextField_num1);
        JPanel_center.add(ways);
        JPanel_center.add(JTextField_num2);
        JPanel_center.add(JLabel_equal);
        JPanel_center.add(JTextField_result);
        JPanel_south.add(JButton_cal);
        JButton_cal.addActionListener(this);
        ways.addActionListener(this);
	}

	public void actionPerformed(ActionEvent e) {
		try {
			
			String value1=JTextField_num1.getText();
			String value2=JTextField_num2.getText();
			if(value2.equals("") && value1.equals("")){
				return;
			}
			Socket server =  new Socket(InetAddress.getLocalHost(),5678);
			String way=(String)ways.getSelectedItem();
			OutputStream os = server.getOutputStream();
			ObjectOutputStream out = new ObjectOutputStream(os);
			int item1 = Integer.parseInt(value1);   
			int item2 = Integer.parseInt(value2);
			CalculationPojo pojo = new CalculationPojo(way,item1,item2);
			
			out.writeObject(pojo);
			out.flush();
			InputStream is =server.getInputStream();
			DataInputStream dis = new DataInputStream(is);
			int result= dis.readInt();
			JTextField_result.setText(String.valueOf(result));
			
			os.close();
			out.close();
			is.close();
			dis.close();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}
	public static void main (String[] args) {
		Client cc=new Client();
	   	cc.pack();
	   	cc.setVisible(true);
	}
}


3、计算器:

package com.boco.calculatorBySocket;

public class Calculation {
	
	
	
	/**
	 * 加
	 * @param a
	 * @param b
	 * @return
	 */
	public int plus (int a,int b){
		return a+b;
	}
	
	/**
	 * 减
	 * @param a
	 * @param b
	 * @return
	 */
	public int minus (int a,int b){
		return a-b;
	}
	
	/**
	 * 乘
	 * @param a
	 * @param b
	 * @return
	 */
	public int mul (int a,int b){
		return a*b;
	}

	/**
	 * 除
	 * @param a
	 * @param b
	 * @return
	 */
	public int Divide (int a,int b){
		return a/b;
	}
}


4:实体:

package com.boco.calculatorBySocket;

import java.io.Serializable;

public class CalculationPojo implements Serializable{
	
	public String way;
	
	public int value1;
	
	public int value2;
	
	public CalculationPojo(String way, int value1 , int value2){
		this.way = way;
		this.value1 = value1;
		this.value2 = value2;
	}

	public String getWay() {
		return way;
	}

	public void setWay(String way) {
		this.way = way;
	}

	public int getValue1() {
		return value1;
	}

	public void setValue1(int value1) {
		this.value1 = value1;
	}

	public int getValue2() {
		return value2;
	}

	public void setValue2(int value2) {
		this.value2 = value2;
	}

}


 

基于Socket实现网络编程

Socket是网络上两个程序间双向通讯的一端,它既可以发送请求,也可以接收请求,利用它可以方便的编写网络上数据的传递,在java中,有专门的类类处理用户的请求和响应。利用Socket 类的方法,就可以...
  • u012942818
  • u012942818
  • 2015年05月24日 17:40
  • 2118

Socket编程实现简易聊天室

1.Socket基础知识   Socket(套接字)用于描述IP地址和端口,是通信链的句柄,应用程序可以通过Socket向网络发出请求或者应答网络请求。   Socket是支持TCP/IP协议的网...
  • salahelx
  • salahelx
  • 2015年06月21日 23:13
  • 7416

用socket编程实现的简单的聊天软件

用socket编程实现的简单的聊天软件 import javax.swing.*; import java.awt.event.*; import javax.swing.border...
  • l450741881
  • l450741881
  • 2016年02月27日 11:55
  • 943

qt编程简单的计算器

QT编程实现简易的计算器 一、 实验目的 1) 熟悉QtCreator的简单操作。 2) 了解Qt程序编写框架。  3) 了解信号和槽机制,熟练掌握信号与槽在应用程序中的使用。  二、 实验内...
  • shangazhe
  • shangazhe
  • 2017年01月18日 15:56
  • 459

Java GUI做简易计算器

貌似逻辑有点问题,界面还能用,凑合着看吧。。有空再改。。package calculator;/*公共类:calculator 功能:计算器界面 版本:1.0 Bill 201...
  • zhengzhaobb
  • zhengzhaobb
  • 2016年02月16日 11:21
  • 3024

Java 实现简易计算器完整代码

最近在学习java的编程,就写了个简易的计算器,可以实现基本的运算,测试目前无bug,下面分享下自己的代码。首先界面:整个面板用了BorderLayout布局,分为北,左和中。中部采用网格布局。定义这...
  • Google_huchun
  • Google_huchun
  • 2017年01月02日 19:31
  • 4999

单片机: 简易计算器的实现(键盘)

利用矩阵键盘实现一个简易的计算器。 为了简化问题,我们假设只支持小于100的非负整数之间的加、减、乘的运算,并且支持连续运算(结果的数值可以再进行运算)。 本程序中C为加号,D为减号,E为乘号,F...
  • NK_test
  • NK_test
  • 2015年12月27日 19:51
  • 6486

项目总结——深入浅出socket网络编程

前言:     为什么会有如题的概念呢,我想对于没有主动听说过socket网络编程的人来说读到题目可能就已经蒙头了,为了很好的让大家进入场景,首先说一下一个需要用到这点东西的业务需求。    ...
  • hy6688_
  • hy6688_
  • 2013年09月30日 00:54
  • 7272

栈实现计算器

栈实现计算器 黑色印记 前段时间利用栈写了一个实现了计算器功能的程序。觉得有意思的,因此今天在这了和大家分享一番。 首先,要写出计算器,你要按照以下几点去写,才能保证运算的优先级不发生错误。 ...
  • xieyihua1994
  • xieyihua1994
  • 2016年06月12日 11:06
  • 5930

设计模式之一:简单工厂模式,用python实现简易计算器

设计模式之一:简单工厂模式,用python实现简易计算器听说写技术博客对别人对自己都有好处,于是从这里开始写第一篇博客,记录自己的学习历程。由于编程功底很薄弱(对于代码的不足或错误,欢迎大家批评指正)...
  • VincentLuo91
  • VincentLuo91
  • 2015年10月25日 15:34
  • 1058
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用socket网络编程,实现的简易CS计算器
举报原因:
原因补充:

(最多只允许输入30个字)