我很难完成上面给出的内容。我成功创建了接口,但我的主要问题是将数字和操作从客户端类发送到服务器,然后将最终答案发送回客户端。有人可以给我建议我下一步该怎么做。
//Client.Java
import java.swing.*;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
public class Client {
public static void main(String[] args) throws IOException {
DatagramSocket clientSocket = new DatagramSocket ();
//Connect to server
InetAddress ipAddress = InetAddress.getByName("localhost"); //12.0.0.1
int portNumber = 9876;
//Calculator Frame
JFrame frame = new JFrame();
frame.setBounds(100, 100, 450, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setTitle("Calculator Assignment" );
frame.getContentPane().setLayout(null);
frame.setVisible(true);
//Label
JLabel label = new JLabel("");
label.setBounds(20, 20, 200, 20);
label.setFont(new Font("Times", Font.BOLD, 16));
label.setHorizontalAlignment(SwingConstants.LEFT);
label.setVerticalAlignment(SwingConstants.CENTER);
frame.getContentPane().add(label);
//First Number Label
JLabel label1 = new JLabel("");
label1.setBounds(20, 20, 200, 20);
label1.setFont(new Font("Times", Font.BOLD, 13));
label1.setHorizontalAlignment(SwingConstants.LEFT);
label1.setVerticalAlignment(SwingConstants.CENTER);
frame.getContentPane().add(label1);
label1.setText("First Number");
//Text Field
JTextField textfield1= new JTextField("");
textfield1.setFont(new Font("Times", Font.BOLD, 14));
textfield1.setBounds(140, 20, 150, 20);
frame.getContentPane().add(textfield1);
//Second Number Label
JLabel label2 = new JLabel("");
label2.setBounds(20, 40, 200, 20);
label2.setFont(new Font("Times", Font.BOLD, 13));
label2.setHorizontalAlignment(SwingConstants.LEFT);
label2.setVerticalAlignment(SwingConstants.CENTER);
frame.getContentPane().add(label2);
label2.setText("Second Number");
//Text Field
JTextField textfield2= new JTextField("");
textfield2.setFont(new Font("Times", Font.BOLD, 14));
textfield2.setBounds(140, 40, 150, 20);
frame.getContentPane().add(textfield2);
//"Answer" Label
JLabel label3 = new JLabel("");
label3.setBounds(20, 70, 200, 20);
label3.setFont(new Font("Times", Font.BOLD, 13));
label3.setHorizontalAlignment(SwingConstants.LEFT);
label3.setVerticalAlignment(SwingConstants.CENTER);
frame.getContentPane().add(label3);
label3.setText("Answer: ");
//Buttons
JButton button1 = new JButton("+");
button1.setBounds(20, 120, 60, 23);
frame.getContentPane().add(button1);
JButton button2 = new JButton("-");
button2.setBounds(85, 120, 60, 23);
frame.getContentPane().add(button2);
JButton button3 = new JButton("×");
button3.setBounds(150, 120, 60, 23);
frame.getContentPane().add(button3);
JButton button4 = new JButton("÷");
button4.setBounds(215, 120, 60, 23);
frame.getContentPane().add(button4);
JButton button5 = new JButton("Max");
button5.setBounds(280, 120, 60, 23);
frame.getContentPane().add(button5);
JButton button6 = new JButton("Min");
button6.setBounds(345, 120, 60, 23);
frame.getContentPane().add(button6);
//Buttons Actions
button1.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label3.setText( "Answer: "+ textfield1.getText() + " + " + textfield2.getText() + " = " + receivedAnswer );
}
});
button2.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label3.setText( "Answer: "+ textfield1.getText() + " - " + textfield2.getText() + " = " + receivedAnswer );
}
});
button3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label3.setText( "Answer: "+ textfield1.getText() + " x " + textfield2.getText() + " = " + receivedAnswer);
}
});
button4.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label3.setText( "Answer: "+ textfield1.getText() + " ÷ " + textfield2.getText() + " = " + receivedAnswer);
}
});
button5.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label3.setText("Answer: Maximum is: " + receivedAnswer);
}
});
button6.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
label3.setText("Answer: Minimum is: " + receivedAnswer);
}
});
//Send First Number
String sendingFirst = textfield1.getText();
byte[] SendingFirst = new byte[1024];
SendingFirst = sendingFirst.getBytes();
DatagramPacket sendingPacket1 = new DatagramPacket(SendingFirst, SendingFirst.length, ipAddress, portNumber);
clientSocket.send(sendingPacket1);
//Send Second Number
String sendingSecond = textfield2.getText();
byte[] SendingSecond = new byte[1024];
SendingSecond = sendingSecond.getBytes();
DatagramPacket sendingPacket2 = new DatagramPacket(SendingSecond, SendingSecond.length, ipAddress, portNumber);
clientSocket.send(sendingPacket2);
//Receive reply from server
byte[] receivedData = new byte[1024];
DatagramPacket receivedPacket = new DatagramPacket(receivedData, receivedData.length);
clientSocket.receive(receivedPacket);
String receivedAnswer = new String(receivedPacket.getData());
System.out.println(receivedAnswer);
clientSocket.close();
}
}
//Server.Java
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Server {
public static void main(String[] args) {
try {
//creating a UDP socket with a port number
DatagramSocket serverSocket = new DatagramSocket(9876);
while (true) {
//Create empty datagrams
byte[] receivedData = new byte[1024];
DatagramPacket receivedPacket1 = new DatagramPacket(receivedData, receivedData.length);
DatagramPacket receivedPacket2 = new DatagramPacket(receivedData, receivedData.length);
//receive from the network through the socket and fill in the empty datagrams
serverSocket.receive(receivedPacket1);
serverSocket.receive(receivedPacket2);
//extract data and print it
String receivedFirst = new String(receivedPacket1.getData());
System.out.println(receivedFirst);
String receivedSecond = new String(receivedPacket1.getData());
System.out.println(receivedSecond);
//Arithmetic Computation and finding Min/Max
float first = Integer.parseInt(receivedFirst);
float second = Integer.parseInt(receivedSecond);
float add, subtract, multiply, divide, maximum, minimum;
add = first + second;
subtract = first - second;
multiply = first * second;
divide = (float) first / second;
if (first > second) {
maximum = first;
minimum = second;
}
else if(second > first) {
maximum = second;
minimum = first;
}
else {
maximum = first;
minimum = first;
}
//reply to the client that sent the message
InetAddress ipAddress = receivedPacket1.getAddress();
int portNumber = receivedPacket1.getPort();
String sendingSentence = "Hello from Server";
byte[] SendingData = new byte[1024];
SendingData = sendingSentence.getBytes();
DatagramPacket sendingPacket = new DatagramPacket(SendingData, SendingData.length, ipAddress, portNumber);
serverSocket.send(sendingPacket);
serverSocket.close();
}
}
catch (Exception ex) {
}
}
}