带有 GUI 的 UDP 客户端/服务器计算器

时间:2021-07-10 07:34:02

标签: java

UDP Client/Server Application

我很难完成上面给出的内容。我成功创建了接口,但我的主要问题是将数字和操作从客户端类发送到服务器,然后将最终答案发送回客户端。有人可以给我建议我下一步该怎么做。

//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) {
        
    }
    
}

}

0 个答案:

没有答案