Toggle Theme Editor
Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate Charcoal

Xin giúp đỡ truyền chuỗi từ client sang server và ngược lại

Discussion in 'Xây dựng ứng dụng server-client desktop' started by coaichua213, 3/7/16.

  1. coaichua213

    coaichua213 New Member

    Em đang tập code client server TCP
    Em sử dụng BufferedReader và BufferedWriter
    Nhưng nó không truyền được chuỗi từ client sang server và ngược lại.
    Nhưng nếu cho sử dụng nhập chuỗi xài Scanner thì nó truyền được
    Bài tập của em là truyền mảng 2 chiều sang server và xử lý ạ

    code của em
    Server.java
    Code:
    mport java.io.IOException;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;
    import java.util.Scanner;
    import java.io.BufferedReader;
    import java.io.BufferedWriter;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    /**
    *
    * @author
    */
    public class Server {
        private ServerSocket listener;  // lắng nghe các yêu cầu từ phía client
        private Socket clientSocket;  // thông tin socket của client (gởi trả kết quả)
        private BufferedReader inputReader; // input stream
        private BufferedWriter outputSWriter;// output stream
       
    
        public Server(int port) throws IOException {
            listener = new ServerSocket(port);
        }
       
        private void runServices() throws IOException{
            while (true) {           
                System.out.println("Waiting for client on port " +
                        listener.getLocalPort() + " ...");
                clientSocket = listener.accept(); // chấp nhận và ghi nhớ thông tin socket của client
                System.out.println(".....");
                // luồng đọc yêu cầu từ phía client
                inputReader = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));                       
                // luồng gởi trả kết quả sau khi đã xử lý yêu cầu, đối số thứ hai là true
                // nhằm thiết lập tính năng auto flush
                outputSWriter = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
    
                String inputData,outputData;
                while (!(inputData=inputReader.readLine()).trim().equalsIgnoreCase("ket thuc")) {                              
                    System.out.println("Du lieu nhan duoc: " + inputData);  // yêu cầu nằm trong inputData
                    outputData = process(inputData);  // xử lý yêu cầu
                    // outputData chứa dữ liệu đã xử lý chờ gởi về client
                   outputSWriter.write(inputData); // gởi kết quả về cho client
                   outputSWriter.newLine();
                   outputSWriter.flush();
                }
                clientSocket.close();
            }
        }
        private String process(String inputData){
            int m = 0,n = 0;
            int mangz[][];
            String chuoi[] = inputData.split(" ", 1);
                for(String x :chuoi)
                    m = Integer.parseInt(x);
            String chuoiv[] = inputData.split(" ", 1);
                for(String t :chuoiv)
                    n = Integer.parseInt(t);
            String chuoib[] = inputData.split(" ");
            mangz = new int[m-2][n-2];
                for(String b :chuoib)
                for(int c =0;c<m;c++)
                    for(int v=0;v<n;v++){
                        mangz[c][v] = Integer.parseInt(b);
                       
                   
                    }
            return ""+tongHang(mangz, m, n);
        }
      
        // private String yourProcess(String inputData){}
        private String tongHang(int mang[][],int m,int n){
             int tonghang =0;
        for(int i =0;i<m;i++){
            for(int j =0;j<n;j++){
                tonghang +=mang[i][j];
            }
        }
        return tonghang+"";
    }
       
        public static void main(String[] args) throws IOException {
            int port = 9090;
            Server server = new Server(port);
            server.runServices();
        }
    }
    
    Client.java
    Code:
    import java.io.BufferedReader;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.net.Socket;
    import java.util.Scanner;
    import java.io.*;
    import java.net.*;
    
    public class Client {
        private Socket socketServer;
        String server; 
        int port;
        private Scanner input,reader;
        private PrintWriter output;
        private BufferedWriter outputStream;
        private BufferedReader inputStream;
    
        public Client(String server,int port) throws IOException {
            this.server = server;
            this.port = port;
        }
       
        private void run() throws IOException{             
            mainMenu();
        }
    
        private void mainMenu() throws IOException {
            int choosedValue;  // lưu trữ giá trị người dùng lựa chọn chức năng
           
            do {         
                // Kết nối tới socket của server
                socketServer = new Socket(server, port); 
                       
                //Đọc dữ liệu do người dùng nhập vào từ bàn phím
                reader = new Scanner(System.in);
               
                System.out.println("[1] - NHẬP DỮ LIỆU TỪ BÀN PHÍM");
                System.out.println("[2] - NHẬP DỮ LIỆU TỪ FILE data.txt");
                System.out.println("[3] - KẾT THÚC");
                System.out.print("Bạn chọn: ");
                //Đọc tùy chọn của người dùng
                choosedValue = reader.nextInt();
                // Xóa bộ đệm
                reader.nextLine();
                // Lấy thông tin luồng nhận từ phía socket của server
                // nhằm nhận kết quả đã xử lý trả về từ phía server
                inputStream = new BufferedReader(new InputStreamReader(socketServer.getInputStream())); 
                // Gởi yêu cầu lên nhờ server xử lý
                outputStream = new BufferedWriter(new OutputStreamWriter(socketServer.getOutputStream()));
               
                String userData = "";
               
                int m,n,mang[][];
               
                           
                if (choosedValue == 2) {
                   reader = new Scanner(new BufferedReader(new FileReader("data.txt")));              
                }
               
                while (choosedValue !=3) {
                    if (choosedValue == 1) {  // đọc dữ liệu từ bàn phím
                        System.out.print("Mời bạn nhập số dòng: ");
                        m = reader.nextInt();
                        System.out.print("Mời bạn nhập số cột: ");
                        n = reader.nextInt();
                        mang = new int[m][n];
                        for (int i=0;i<m;i++)
                            for(int j=0;j<n;j++){
                                System.out.print("Mời bạn nhập số mảng[:"+i+"]["+j+"]=");
                                mang[i][j]= reader.nextInt();
                           
                            }
                               
                        userData = m+" "+n;
                        for (int k=0;k<m;k++)
                            for(int l=0;l<n;l++){
                                userData+=" "+mang[k][l];
                               
                            }
                        System.out.println(userData);
                       
                        outputStream.write(userData); // gởi yêu cầu lên server [1;50]
                        outputStream.newLine();
                        outputStream.flush();
                        if (!userData.equalsIgnoreCase("ket thuc")) {
                            System.out.println("Kết quả là: "+ inputStream.readLine());
                          
                        }else{
                            break;  // Thoát khỏi vòng lặp while (choosedValue !=3)
                        }
                    }
                   
                    if (choosedValue ==2) {
                        while (reader.hasNext()) {
                            userData = reader.nextLine();
                            output.println(userData); 
                               
                            if (!userData.equalsIgnoreCase("ket thuc")) {
                                System.out.println("KẾT QUẢ: " + inputStream.readLine());
                            }
                        }
                       
                        if (userData.equalsIgnoreCase("ket thuc")) {
                            break;
                        }
                    }               
                }
            } while (choosedValue !=3);
        }
       
        public static void main(String[] args) throws IOException {
            Client client = new Client("localhost", 9090);
            client.run();
        }
       
    }
     
  2. coaichua213

    coaichua213 New Member

    Ai giúp mình với ạ
     
  3. JackV

    JackV Administrator Staff Member

    Bạn không nêu rõ vấn đề nên mọi người không biết những gì bạn cần giúp
    Tìm hiểu lại việc sử dụng split có limit nhé http://www.tutorialspoint.com/java/java_string_split.htm

    Còn việc tìm m,n thì đây là code ví dụ
    PHP:
            String chuoi[] = inputData.split(" ");
            
    Integer.parseInt(chuoi[0]);
            
    Integer.parseInt(chuoi[1]);
            
    System.out.println("m n: '" "," "'");
    Làm đến đâu phải kiểm tra kết quả công việc ở đó nhé.

    Để được mọi người hỗ trợ nhanh hơn bạn đọc quy tắc tại đây http://congdongjava.com/forum/threads/quy-tắc-hỗ-trợ-khi-hoạt-động-trên-cộng-đồng-java.1715/
     
    coaichua213 likes this.
  4. coaichua213

    coaichua213 New Member

    Dạ ý em là em sử dụng cả DataOutputStream() rồi cả BufferedReader nhưng nó vẫn không truyền từ client sang cho server được ạ...
     
  5. JackV

    JackV Administrator Staff Member

    Sao lại bảo là không được, code của bạn viết sau khi sửa phần tìm m,n thì khi chạy server có được giá trị m và n như bên client nhập mà

    Client
    Server
    Nếu không truyền được thì cái Du lieu nhan duoc: 2 2 1 2 3 4 là gì vậy.
     
    Last edited: 5/7/16
  6. coaichua213

    coaichua213 New Member

    Dạ cái đó chỉ là e ghép các dữ liệu từ client lại thôi ạ... Không phải chuỗi từ server truyền về...
     

Chia sẻ trang này

Loading...