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中建立客户端和服务器设备之间的连接。