谁能告诉我为什么这些方法在第一次方法调用后没有运行? - Java

时间:2018-05-07 15:21:46

标签: java sockets arraylist methods client-server

所以基本上我有一个简单的echo服务器客户端。我想要做的是运行服务器然后运行客户端,一旦客户端运行它应该运行其中的方法。但是,只有第一个方法searchForSkill运行,在此之后没有其他任何事情可以解释为什么会发生这种情况或如何确保实际运行的下一个方法?我有一个开发人员数据库类,它使用构造函数来创建服务器类中保存的对象。非常感谢任何帮助。

服务器类:

      import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;



public class Server {



    static List<DeveloperDatabase> list = new ArrayList<DeveloperDatabase>(){

        {
            add(new DeveloperDatabase(1,"David Ferguson", "Java", true));
            add(new DeveloperDatabase(2,"Grant Thompson", "Java", true));
            add(new DeveloperDatabase(3,"Craig Jackson", "C++", true));
            add(new DeveloperDatabase(4,"Kevin James","C++", true));
            add(new DeveloperDatabase(5,"Greg Troupe", "Python", true));
            add(new DeveloperDatabase(6,"James Smith", "Python", true));
            add(new DeveloperDatabase(7,"Jamie Richie", "PHP", true));
            add(new DeveloperDatabase(8,"Rory McGrattan", "PHP", false));
        }

    };
    public static String printJava(){
        String message="";
        for (int i=0;i<2;i++){
            message +=list.get(i).toString();
            message+=" \n";

        }
        return message;
    }
    public static String printC(){
        String message="";
        for (int i=2;i<4;i++){
            message +=list.get(i).toString();
            message+=" \n";

        }
        return message;
    }
    public static String printPy(){
        String message="";
        for (int i=4;i<6;i++){
            message +=list.get(i).toString();
            message+=" \n";

        }
        return message;
    }
    public static String printPHP(){
        String message="";
        for (int i=6;i<8;i++){
            message +=list.get(i).toString();
            message+=" \n";

        }
        return message;
    }

    // Main
    public static void main(String[] args) {


        ServerSocket listenSocket;
        Socket s;

        PrintWriter toClient = null;
        Scanner fromClient = null;

        int port;                       // holds port server will listen on
        String userInput;               // holds a line typed by the user

        System.out.print("Server - port to listen on: ");
        //port = stdIn.nextInt();       // get port number from user
        port = 4444;                    // get port number from user
        System.out.println(port);


        try {
            listenSocket = new ServerSocket(port);
            System.out.println("Waiting for client...");
            s = listenSocket.accept();

            toClient = new PrintWriter(s.getOutputStream(), true);
            fromClient = new Scanner(s.getInputStream());

            int inputLine;
            do {
                inputLine = fromClient.nextInt();


                switch (inputLine) {
                    case 1: // get skills
                    {
                        System.out.println("GET skill");
                        fromClient.nextLine();
                        String quoteNum = fromClient.nextLine();//receive from client
                        if (quoteNum.equalsIgnoreCase("Java")) {
                            toClient.println(printJava());
                        } else if (quoteNum.equalsIgnoreCase("C++")) {
                            toClient.println(printC());
                        } else if (quoteNum.equalsIgnoreCase("Python")) {
                            toClient.println(printPy());
                        } else if (quoteNum.equalsIgnoreCase("PHP")) {
                            toClient.println(printPHP());
                        }
                        else {
                            toClient.println("No developer with those skills found");
                        }
                        // toClient.println(list.equals("Java"));//number -1 for array (0) to client print
                        System.out.println("Pushed Developer number: " + quoteNum + " to client at " + s.getInetAddress());
                        //toClient.println(quotes[quoteNum]); // return quote          //if "java' { get(0)   get(1)
                        break;
                    }
                    case 2: // add quote
                    {
                        System.out.println("ADD Developer to System");
                        fromClient.nextLine();   // flush newline
                        String quote = fromClient.next();
                        fromClient.nextLine();
                        String quote1 = fromClient.next();
                        fromClient.nextLine();
                        boolean quote2 = fromClient.nextBoolean();
                        toClient.println("The\t*************Developer has been Added to the Developer Database********");
                        list.add(new DeveloperDatabase(9, quote, quote1, quote2));
                        toClient.println(list.get(8).toString());
                        //addDeveloper(quote,quote1,quote2);
                        System.out.println(list.get(8));
                        //System.out.println("Received quote from client:" + quote);
                        quote = quote + "\n\n";
                        //list.add((quote);
                        System.out.println("Added Developer: " + quote);
                        break;
                    }
                    case 3: // Check if Developer is available
                    {
                        System.out.println("Check if developer is Available\n");
                        fromClient.nextLine();
                        String quoteNum = fromClient.nextLine();
                        System.out.println("Checking availability for: " + quoteNum);
                        if (quoteNum.equalsIgnoreCase("Rory McGrattan")) {
                            toClient.println("The Developer is not available for hire");
                        } else {
                            toClient.println("The Developer is available for hire");
                        }break;
                    }case 4: {
                        System.out.println("Hire A Developer");
                        String quoteNum =fromClient.next();
                        System.out.println("Client wants to hire: "+quoteNum);
                        String message = quoteNum;
                        for(int i=0;i<list.size();i++){
                            if (quoteNum.equalsIgnoreCase(list.get(i).getDeveloperName())){
                                list.get(i).hireDeveloper();
                            }//if
                        }//if
                        //System.out.println(message);
                        toClient.println("******* You have Hired: "+ message+" ********");
                        break;
                    }
                    case 5: {// Print all Developers
                        String message="";
                        for (int i=0;i<8;i++){
                            message +=list.get(i).toString();
                            message+=" \n";
                        }
                        toClient.println(message);
                    }
                    default:
                        break;

                }

            } while (fromClient.hasNextLine());

            // Close all streams
            System.out.println("Closing Server...");
            toClient.close();
            fromClient.close();
            s.close();
        } catch (Exception e) {
            System.out.println("Exception: " + e);
            System.exit(1);
        }
    } // run


} // Server

客户端类:

import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.NoSuchElementException;
import java.util.Scanner;

public class Client {
    static Scanner stdIn = new Scanner(System.in);
    static PrintWriter toServer = null; // output stream to remote host
    static Scanner fromServer = null;   // input stream from remote host
    static String reply;// holds reply from remote host

public static void doTasks(){
    searchForSkill("PHP");

    addDeveloper("David Blaine", "Java", true);
    checkAvailability("David Ferguson");
    hireDeveloper("Thompson");
    printAllDevelopers();


}

    private static void searchForSkill(String skill) {
        toServer.println(1);
        String quoteNum = "php"; //Search for a specific coding language - Specific to the entered parameters
        System.out.println("Searching for Skill: " + skill + " in Developer Database");
        toServer.println(quoteNum);
        while (!(reply = fromServer.nextLine()).isEmpty()) {
            // System.out.println(reply1);
            System.out.println(reply);// print reply to screen
        }
        fromServer.nextLine();     // Consume the newline
        System.out.println();

    }
    public static void addDeveloper(String name, String skill,boolean hire) {
        toServer.println(2);
        System.out.println("Add Developer to system ");
        stdIn.nextLine();   // flush newline
        String quoteString = name;//stdIn.nextLine();
        String quoteString1 = skill;//stdIn.nextLine();
        boolean quoteString2 = hire;//stdIn.nextLine();
        toServer.println(quoteString);
        toServer.println(quoteString1);
        toServer.println(quoteString2);
        fromServer.next();
        System.out.println("\nDeveloper entered: " + quoteString + "\n");
        while (!(reply = fromServer.nextLine()).isEmpty()) {
            // System.out.println(reply1);
            System.out.println(reply);// print reply to screen
        }
    }
    public static void checkAvailability(String developerName) {
        try {
            toServer.println(3);
            System.out.println("Send Developer Name to Find Availability: ");
            String quoteDel = developerName;
            toServer.println(quoteDel);
            while (!(reply = fromServer.nextLine()).isEmpty()) {
                // System.out.println(reply1);
                System.out.println(reply);// print reply to screen
            }
        } catch (NoSuchElementException e) {
        }
    }

    public static void hireDeveloper(String name) {
        toServer.println(4);
        String quoteNum = name; //Search for a specific coding language - Specific to the entered parameters
        System.out.println("Searching for: " + name + " in Developer Database");
        toServer.println(quoteNum);
        while (!(reply = fromServer.nextLine()).isEmpty()) {
            // System.out.println(reply1);
            System.out.println(reply);// print reply to screen
        }
        fromServer.nextLine();     // Consume the newline
        System.out.println();

    }

    public static void printAllDevelopers(){
        toServer.println(5);
        while (!(reply = fromServer.nextLine()).isEmpty()) {
            // System.out.println(reply1);
            System.out.println(reply);// print reply to screen
        }
        fromServer.nextLine();     // Consume the newline
        System.out.println();

    }

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

        Socket serverSocket = null;  // holds the Socket object
        String remoteServer = "localhost"; // remote host is 'local'!

        int port;

        try {
            System.out.print("Server port: ");
            //port = stdIn.nextInt();     // get port number from user
            port = 4444;     // get port number from user
            System.out.print(port);
            System.out.println("\n");

            // Try to connect to remote host machine on port xxxx
            serverSocket = new Socket(remoteServer, port);
            // Set up the input/output streams to the remote host
            toServer = new PrintWriter(serverSocket.getOutputStream(), true);
            // Convert the socket's input stream to a 'Scanner'
            // to allow 'nextLine' operations to be performed
            fromServer = new Scanner(serverSocket.getInputStream());
        } catch (Exception e) {
            System.err.println("Exception: " + e);
            System.exit(1);
        } // try-catch

        String userInput;                       // holds a line typed by the user
        String name;                            // to store name
        String number;                          // to store phone number

        do {
            userInput = "c";
            searchForSkill("PHP");
            addDeveloper("David Blaine","Java",true);
            checkAvailability("Jamie Richie");
            hireDeveloper("Jamie Richie");
            printAllDevelopers();
            //stdIn.nextLine();         // get command from user
        } while (!userInput.equalsIgnoreCase("x"));



        toServer.println(userInput);

        // Close all streams
        toServer.close();
        fromServer.close();
        stdIn.close();
        serverSocket.close();

    } // main
} // Client

开发人员数据库类:

/**
 * Created by ${Grant} on ${28/09/2017}
 * COMMENTS ABOUT PROGRAM HERE
 */
public class DeveloperDatabase {
    private  int id;
    private  String developerName;
    private  String codingLanguage;
    private  boolean freeForHire;

    public  DeveloperDatabase(){

    }

    public  DeveloperDatabase(int id,String name,String codeSkills,boolean hire){
        this.id = id;
        this.developerName = name;
        this.codingLanguage=codeSkills;
        this.freeForHire=hire;
    }


    public String toString() {
        String message = "\tName: " +developerName;
        message += "\n" + "\tCoding Language:  "+ codingLanguage+"\n";

        if (freeForHire== true) {
            message += "\tThe developer is Available! for Hire!\n";
        } else {
            message += "\tThe developer is not Available for Hire!\n";
        }

        return message;
    }//toString


    public boolean getFreeForHire() {

        if (freeForHire==true){
            System.out.println("The Developer is free to hire!");
        }else{
            System.out.println("The Developer is not free to hire!");
        }
        return freeForHire;

    }

    public  String getCodingLanguage() {
        return codingLanguage;
    }

    public void hireDeveloper(){
        if (freeForHire==true)
            freeForHire = false;
        System.out.println(developerName +" is Hired!");
    }

    public String getDeveloperName() {
        return developerName;
    }

    public static void main(String[] args) {

    }//main
}//class   

1 个答案:

答案 0 :(得分:0)

while (!(reply = fromServer.nextLine()).isEmpty()) {
    // System.out.println(reply1);
    System.out.println(reply);// print reply to screen
}

您收到回复,阻止您退出while循环。