Từ 1 tới 2 trên tổng số 2 kết quả

Đề tài: Lập trình Socket java Calculator

  1. #1
    Ngày gia nhập
    03 2010
    Bài viết
    0

    Angry Lập trình Socket java Calculator

    mình đang 1 bài tập về lập trình socket java: làm chương trình calculator (Caculator Server và Caculator Client) xây dụng chương trình hỗ trợ được các phép tính trên phân số và số thực... mình mới chỉ giải quyết được ý trên số thực..còn trên phân số thì mình bó tay...bạn nào giúp mình với!!

    sau đây là code: Caculator Server

    Code:
    package servercalculator;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.SocketException;
    
    
    
    public class ServerCalculator {
    
        /**
         * @param args the command line arguments
         */
        public static void main(String[] args) {
            // TODO code application logic here
            try {
                DatagramSocket dgs = new DatagramSocket(1234);
                while (true) {
                    byte[] arrReceive = new byte[1024];
                    DatagramPacket dgReceive = new DatagramPacket(arrReceive, arrReceive.length);
                    System.out.println("Dang doi nhan du lieu");
                    dgs.receive(dgReceive);
                    
                    System.out.println("Da nhan du lieu tu" + dgReceive.getAddress().toString() + ":" + dgReceive.getPort());
    
                    ByteArrayInputStream bAInput = new ByteArrayInputStream(dgReceive.getData(), 0, dgReceive.getLength());
                    DataInputStream dip = new DataInputStream(bAInput);
                    int dau = dip.readInt();
                    double so1 = dip.readDouble();
                    double so2 = dip.readDouble();
                    double kq =   0;
                    switch (dau) {
                        case 1:
                            kq = so1 + so2;
                            break;
                        case 2:
                            kq = so1 - so2;
                            break;
                        case 3:
                            kq = so1 / so2;
                            break;
                        case 4:
                            kq = so1 * so2;
                            break;
                        default:
                            break;
                    }
                    ByteArrayOutputStream bAOut = new ByteArrayOutputStream();
                    DataOutputStream out = new DataOutputStream(bAOut);
                    out.writeDouble(kq);
                    byte[] arrSend = bAOut.toByteArray();
                    DatagramPacket dgSend = new DatagramPacket(arrSend, arrSend.length, dgReceive.getAddress(), dgReceive.getPort());
                    dgs.send(dgSend);
                }
                //dgs.close();
            } catch (Exception ex) {
            }
        }
    }
    Còn đây là client

    Code:
    package clientcalculator;
    
    import java.io.ByteArrayInputStream;
    import java.io.ByteArrayOutputStream;
    import java.io.DataInputStream;
    import java.io.DataOutputStream;
    import java.net.DatagramPacket;
    import java.net.DatagramSocket;
    import java.net.InetAddress;
    
    
    public class ClientCalculator {
    
     
        public static void main(String[] args) {
            // TODO code application logic here
            try {
                DatagramSocket dgc = new DatagramSocket();
                DataInputStream diConsole = new DataInputStream(System.in);
                System.out.print("Nhap phep tinh: ");
                int pheptinh = Integer.parseInt(diConsole.readLine());
                
                System.out.print("Nhap so 1: ");
                Double so1 = Double.parseDouble(diConsole.readLine());
                
                System.out.print("Nhap so 2: ");
                Double so2 = Double.parseDouble(diConsole.readLine());
                
                ByteArrayOutputStream bAOut = new ByteArrayOutputStream();
                DataOutputStream dout = new DataOutputStream(bAOut);
                dout.writeInt(pheptinh);
                dout.writeDouble(so1);
                dout.writeDouble(so2);
                
                byte[] arrSend = bAOut.toByteArray();
                DatagramPacket dgSend = new DatagramPacket(arrSend, arrSend.length,InetAddress.getLocalHost(),1234);
                
                dgc.send(dgSend);
                
                byte[] arrReceive = new byte[1024];
                DatagramPacket dgReceive = new DatagramPacket(arrReceive, arrReceive.length);
                dgc.receive(dgReceive);
                
                ByteArrayInputStream bAInput = new ByteArrayInputStream(dgReceive.getData(),0,dgReceive.getLength());
                DataInputStream dip = new DataInputStream(bAInput);
                Double kq = dip.readDouble();
                System.out.println("ket qua:" + kq);
                
                dgc.close();
                
            } catch (Exception ex) {}
        }
    }

    (các phép tính 1 tương ứng +, 2 -,3 chia,4 nhận)

  2. #2
    Ngày gia nhập
    05 2007
    Nơi ở
    ha noi
    Bài viết
    15

    Server nhận từ client một mảng byte. Để tính toán được phân số thì client và server phải có một quy tắc chuyển dữ liệu sao cho server khi đọc mảng byte đó biết được là đang tính toán cho dữ liệu gì, với mỗi cách tính dữ liệu sẽ có cách đọc mảng byte nhận được theo quy tắc ra sao.

    Ví dụ, bạn quy định 1 byte đầu tiên trong mảng sẽ định nghĩa kiểu tính toán: số nguyên, số thực, phân số .... trong trường hợp phân số, byte tiếp theo trong mảng ghi chiều dài của tử số, byte nữa chiều dài mẫu số và đến đoạn tiếp thì là dữ liệu cụ thể của phân số đó.

    Đây gọi là tạo ra dữ liệu có cấu trúc. Để thiết kế cho sáng sủa nên tạo ra các Class mô tả và phân tích cấu trúc.
    Nghề chính IT
    Lắm khi thảm hại
    Luyện nghề tay trái
    Tán gái làm thơ

Các đề tài tương tự

  1. Cách quản lý tối ưu các kết nối tcp socket trong Java?
    Gửi bởi htn trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 6
    Bài viết cuối: 30-07-2016, 07:29 AM
  2. Thắc mắc lập trình socket trong java
    Gửi bởi mrarsenal10 trong diễn đàn Nhập môn lập trình Java
    Trả lời: 1
    Bài viết cuối: 01-01-2014, 01:27 PM
  3. Lập trình socket trong Java, 1 server kết nối nhiều client trong Java như thế nào?
    Gửi bởi detective009 trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 12
    Bài viết cuối: 27-10-2013, 12:53 AM
  4. Lập trình socket trong java
    Gửi bởi htt418 trong diễn đàn Nhập môn lập trình Java
    Trả lời: 0
    Bài viết cuối: 04-10-2013, 09:45 PM
  5. chuyển ảnh qua java socket nên làm thế nào cho nhanh?
    Gửi bởi haitacnj trong diễn đàn Thắc mắc lập trình Java
    Trả lời: 2
    Bài viết cuối: 09-05-2012, 01:58 AM

Tags của đề tài này

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn