Java 使用TCP的简单计算器

Java 使用TCP的简单计算器

互联网协议套件包含了各种协议,使得设备之间可以在互联网上进行通信。TCP是该套件中最常见的协议。它是一种面向连接的协议,这意味着它在通信结束之前维护两个设备之间已建立的连接。这也是为什么在浏览网页、发送电子邮件和传输文件时使用TCP的原因。

在本文中,我们将使用Java中的TCP开发一个简单的客户端-服务器端计算器。客户端将请求操作,服务器将在计算后将结果发送给客户端设备。

Java网络编程

让我们首先简要了解一些关于Java网络编程的基本概念-

InetAddress

IP地址是一种32位或者128位的无符号数字,用于唯一标识互联网上的设备。使用IP主机名比使用数字地址更容易记忆。因此,我们需要使用”InetAddress”类封装它。我们使用它的内置方法”getLocalHost()”来检索LocalHost的IP地址。

Socket

它是Java网络概念的基础,允许设备同时为各种客户提供服务。有两种类型的TCP套接字类。一种是用于接收并发送结果到客户端设备的”ServerSocket”类,另一种是用于在客户端请求信息时使用的”Socket”类。

I/O流

流是在Java网络编程中执行输入和输出操作时使用的抽象。通过使用’getInputStream()’和’getOutputStream()’,我们可以访问与”Socket”类相关联的输入和输出流。

使用TCP的计算器程序

客户端程序

代码工作原理

  • 首先,我们导入两个最重要的包,命名为”java.net”和”java.io”,以便访问与Java网络相关的所有类,以及用于输入和输出流的”java.util”包中的”Scanner”类。

  • 获取本地主机地址,然后将端口号和地址存储在”Socket”类的对象中。

  • 定义两个对象,命名为”inpStrm”(用于接收数据)和”outpStrm”(以流的形式发送数据)。

  • 现在,在try块中,我们将要求用户输入来请求操作,并根据结果进行接收。

示例

import java.io.*;
import java.net.*;
import java.util.*;
public class ClientCal {
   public static void main(String[] args) throws IOException {
      // fetching address of localhost
      InetAddress addr = InetAddress.getLocalHost();
      Scanner inp = new Scanner(System.in);
      // establishing socket connection
      Socket sock = new Socket(addr, 6666);
      // to send and receive data through streams
      DataInputStream inpStrm = new DataInputStream(sock.getInputStream());
      DataOutputStream outpStrm = new DataOutputStream(sock.getOutputStream());
      try {
         while (true) {
            System.out.println("Type 1 for Addition");
           System.out.println("Type 2 for Subtraction");
           System.out.println("Type 3 for Multiplication");
           System.out.println("Type 4 for Division");
            System.out.println("Enter your choice: ");
            int oprtr = inp.nextInt();
            // Type 0 for cut the connection
            if (oprtr == 0) {
               break;
            }
            // sending the operator for operation
            outpStrm.writeInt(oprtr); 
            // reading result from server
            String res = inpStrm.readUTF();
            System.out.println("Your Result for the given operation = " + res);
         }
      }
      // to handle exception
      catch(Exception exp) {
         System.out.println(exp);
      } 
   }
}

服务器端程序

代码的工作原理

  • 首先,与客户端建立连接。

  • 然后从客户端读取请求。

  • 在try块中,使用switch case执行操作并将结果发送到客户端设备。

  • 使用catch块来处理运行时的任何异常。

示例

import java.io.*;
import java.net.*;
import java.util.*; 
public class ServeCalc {
   public static void main(String args[]) throws IOException {
      // establishing the socket connection
      ServerSocket Serve = new ServerSocket(6666);
      Socket sock = Serve.accept();
      // to send and receive data through streams
      DataInputStream inpStrm = new DataInputStream(sock.getInputStream());
      DataOutputStream outpStrm = new DataOutputStream(sock.getOutputStream());
      try {
         while (true) {
            // reading input from client
            int oprtr = inpStrm.readInt();
            System.out.println("Client has requested for " + oprtr + " operation");
            int res = 0;
            int data1 = 15;
            int data2 = 5;
            switch(oprtr) {
                case 1 : 
                   res = data1 + data2;
                  outpStrm.writeUTF(Integer.toString(res));
                    break;
                case 2 :
                    res = data1 - data2;
                  outpStrm.writeUTF(Integer.toString(res));
                    break;
                case 3 :
                    res = data1 * data2;
                  outpStrm.writeUTF(Integer.toString(res));
                    break;
                case 4 :
                    res = data1 / data2;
                  outpStrm.writeUTF(Integer.toString(res));
                    break;
                default :
                 outpStrm.writeUTF(" You have given invalid choice! ");
                    break; 
            }
            System.out.println("Result sent to the client...");
         }
      }
      // to handle exception
      catch(Exception exp) {
         System.out.println(exp);
      } 
   }
}

为了运行这两个程序,在本地机器上同时打开两个cmd。在第一个cmd界面上,编译并运行服务器端程序,然后在其他界面上执行客户端程序。

服务器端输出

D:\Java Programs>javac ServeCalc.java
D:\Java Programs>java ServeCalc
Client has requested for 1 operation
Result sent to the client...
Client has requested for 2 operation
Result sent to the client...
Client has requested for 3 operation
Result sent to the client...
Client has requested for 4 operation
Result sent to the client...
java.net.SocketException: Connection reset

客户端输出

D:\Java Programs>javac ClientCal.java 
D:\Java Programs>java ClientCal
Type 1 for Addition
Type 2 for Subtraction
Type 3 for Multiplication
Type 4 for Division
Enter your choice:
1
Your Result for the given operation = 20
Type 1 for Addition
Type 2 for Subtraction
Type 3 for Multiplication
Type 4 for Division
Enter your choice:
2
Your Result for the given operation = 10
Enter your choice:
0

当我们输入0时,连接将被终止,程序将停止执行。

结论

在本文中,我们学习了Java网络编程的几个基本概念。还讨论了使用传输控制协议的简单计算器的服务器端和客户端程序。我们发现了如何在Java中建立客户端和服务器设备之间的连接。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程