Cấp bậc tác giả:

JAVA

Viết ứng dụng để minh họa gửi dữ liệu đến server và client xử lí nó

Được viết bởi QuangIT ngày 15/09/2012 lúc 05:38 PM
Viết ứng dụng để minh họa gửi dữ liệu đến server và client xử lí nó
  • 0
  • 2714

Viết ứng dụng để minh họa gửi dữ liệu đến server và client xử lí nó


Đề bài:Viết ứng dụng để minh họa gửi dữ liệu đến server và client xử lí nó

Ví dụ hai chương trình độc lập chạy trên JAVA: chương trình client và chương trình server. Chương trình client thực thi một lớp KnockKnockClient. Chương trình server thực thi hai lớp: KnockKnockServer và KnockKnockProtocol. KnockKnockServer chứa phương thức main cho chương trình server và mở cổng, kết nối và đọc, gửi dữ liệu đến socket, còn KnockKnockProtocol xử lí jokes. Nó theo dõi các joke hiện tại, trạng thái hiện tại (gửi knock knock, gửi clue, v.v…). và trả về giá trị khác nhau của joke của trạng thái hiện tại. Đối tượng thực thi giao thức xác đinh – ngôn ngữ giao tiếp giữa client và server

Chức năng chương trình:

-         Một chương trình vui nhộn, trao đổi thông điệp client-server qua lại lẫn nhau, tựa như chat hoặc game

Cơ chế:

-         Dùng cơ chế client/server để gửi nhận thông điệp

Các lớp và chức năng các lớp:

-         Khi client và server kết nối với nhau thì Server sẽ hiển thị “Knock!Knock!”

-         Nếu người sử dụng gửi “Who’s there?”, server sẽ gửi tên hiện tại của người đó trong chuỗi clues với chỉ số là currentJoke là chỉ số của người hiện tại

-         Nếu tiếp tục gửi tên của người hiện tại + who? (Tức là hỏi họ là ai), thì nó kết hợp với chuỗi answers để trả lời cho client

-         Server sẽ hỏi có muốn tiếp tục không, nếu client đồng ý thì nó sẽ chuyển đến người tiếp theo là người hiện hành, cứ như vậy cho đến khi người sử dụng không muốn tiếp tục nữa

Kết quả:

SERVER

CLIENT

 


  KnockKnockServer

import java.net.*;

import java.io.*;

public class KnockKnockServer {

    public static void main(String[] args) throws IOException {

        ServerSocket serverSocket = null;

        try {

            serverSocket = new ServerSocket(4444);

        }

        catch (IOException e) {

            System.err.println("Could not listen on port: 4444.");

            System.exit(1);

        }

        Socket clientSocket = null;

        try {

            clientSocket = serverSocket.accept();

        }

        catch (IOException e) {

            System.err.println("Accept failed.");

            System.exit(1);

        }

        PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

        BufferedReader in = new BufferedReader(

        new InputStreamReader(

                clientSocket.getInputStream()));

                String inputLine, outputLine;

                KnockKnockProtocol kkp = new KnockKnockProtocol();

                outputLine = kkp.processInput(null);

                out.println(outputLine);

                while ((inputLine = in.readLine()) != null) {

                outputLine = kkp.processInput(inputLine);

                out.println(outputLine);

                if (outputLine.equals("Bye."))

                break;

                }

                out.close();

                in.close();

                clientSocket.close();

                serverSocket.close();

    }

}


KnockKnockProtocal


 public class KnockKnockProtocol {
    private static final int WAITING = 0;
    private static final int SENTKNOCKKNOCK = 1;
    private static final int SENTCLUE = 2;
    private static final int ANOTHER = 3;
    private static final int NUMJOKES = 5;
    private int state = WAITING;
    private int currentJoke = 0;
    private String[] clues = { "Turnip", "Little Old Lady", "Atch", "Who", "Who" };
    private String[] answers = { "Turnip the heat, it's cold in here!",
    "I didn't know you could yodel!",
    "Bless you!",
    "Is there an owl in here?",
    "Is there an echo in here?" };
    public String processInput(String theInput) {
        String theOutput = null;
        if (state == WAITING) {
        theOutput = "Knock! Knock!";
        state = SENTKNOCKKNOCK;
        } 
        else if (state == SENTKNOCKKNOCK) {
            if (theInput.equalsIgnoreCase("Who's there?")) {
                theOutput = clues[currentJoke];
                state = SENTCLUE;
                } 
            else {
                theOutput = "You're supposed to say \"Who's there?\"! " +
                "Try again. Knock! Knock!";
                }
        } 
        else if (state == SENTCLUE) {
            if (theInput.equalsIgnoreCase(clues[currentJoke] + " who?")) {
                theOutput = answers[currentJoke] + " Want another? (y/n)";
                state = ANOTHER;
            } 
            else {
                theOutput = "You're supposed to say \"" +
                clues[currentJoke] +
                " who?\"" +
                "! Try again. Knock! Knock!";
                state = SENTKNOCKKNOCK;
            }
        } 
        else if (state == ANOTHER) {
            if (theInput.equalsIgnoreCase("y")) {
                theOutput = "Knock! Knock!";
                if (currentJoke == (NUMJOKES - 1))
                currentJoke = 0;
                else
                currentJoke++;
                state = SENTKNOCKKNOCK;
                } 
            else {
                theOutput = "Bye.";
                state = WAITING;
            }
        }
        return theOutput;
    }
}
KnockKnockClient

import java.io.*;
import java.net.*;
public class KnockKnockClient {
    public static void main(String[] args) throws IOException {
        Socket kkSocket = null;
        PrintWriter out = null;
        BufferedReader in = null;
        try {
            kkSocket = new Socket("localhost", 4444);
            out = new PrintWriter(kkSocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));
        } 
        catch (UnknownHostException e) {
            System.err.println("Don't know about host: taranis.");
            System.exit(1);
        } 
        catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: taranis.");
            System.exit(1);
        }
        BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));
        String fromServer;
        String fromUser;
        while ((fromServer = in.readLine()) != null) {
            System.out.println("Server: " + fromServer);
            if (fromServer.equals("Bye."))
                break;
            fromUser = stdIn.readLine();
            if (fromUser != null) {
                System.out.println("Client: " + fromUser);
                out.println(fromUser);
            }
        }
        out.close();
        in.close();
        stdIn.close();
        kkSocket.close();
    }
}
 


Nguồn bài viết: Dngaz.com

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML