Knock Knock application with server and UI

I am creating a simple Knock Knock application (socket programming) where there is a localhost server and there is a client.the program is simple, the server will tell the knock knock jokes, this is how it's supposed to go, Server: Knock Knock Client: Who's there? Server: Turnip. Client: Turnip Who? Server: Turnip the heat. So that's how the program supposed to go. but the thing is my GUI doesn't show any messages. on my Text area. Here are my codes. The Server: 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(); } } The KnockKnockProtocol import java.net.*; import java.io.*; 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; } } The Client. import java.io.*; import java.net.*; public class KnockKnockClient { public String fromServer; public String fromUser; public void Client() throws IOException { Socket kkSocket = null; PrintWriter out = null; BufferedReader in = null; try { kkSocket = new Socket("127.0.0.1", 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: 127.0.0.1"); System.exit(1); } catch (IOException e) { System.err.println("Couldn't get I/O for the connection to: 127.0.0.1"); System.exit(1); } BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in)); 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(); } } And The UI import java.awt.event.ActionListener; public class KnockKnockWindow extends JFrame { JTextArea clientTextArea; JTextArea serverTextArea; JButton submitButton; public KnockKnockWindow() { super("Chat Window"); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); setLocationRelativeTo(null); setSize(420,228); getContentPane().setLayout(null); clientTextArea = new JTextArea(); clientTextArea.setBounds(10, 118, 278, 51); getContentPane().add(clientTextArea); serverTextArea = new JTextArea(); serverTextArea.setBounds(10, 11, 278, 96); getContentPane().add(serverTextArea); submitButton = new JButton("Submit"); submitButton.setBounds(298, 118, 89, 51); getContentPane().add(submitButton); } public void setServerText(String fromServer){ serverTextArea.setText(fromServer); } public void setClientText(String fromClient){ clientTextArea.setText(fromClient); } public String returnClientText(){ return clientTextArea.getText(); } public void addSubmitListener(ActionListener sub){ submitButton.addActionListener(sub); } } The Controller import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class KnockKnockController { private KnockKnockClient client; private KnockKnockWindow window; public KnockKnockController(KnockKnockClient client, KnockKnockWindow window){ this.client = client; this.window = window; window.addSubmitListener(new SubmitListener()); window.setServerText(client.fromServer); } public class SubmitListener implements ActionListener{ public void actionPerformed(ActionEvent arg0) { client.fromUser = window.returnClientText(); } } } And the Main Application import javax.swing.JFrame; public class KnockTest extends JFrame{ public static void main (String[] args){ KnockKnockClient kkcl = new KnockKnockClient(); KnockKnockWindow kkw = new KnockKnockWindow(); KnockKnockController kkc = new KnockKnockController(kkcl,kkw); } } We will run the server first, then the main. But why is it that I am not receiving any messages from the server? when I click start. The text area of the Server should say KnockKnock. but it appears it is not showing, any idea? sorry for the long code post, but I do not know to shorten them here. since I know most of them are important
I would recommend a debugger with a (somewhat low) sense of humor.

以上就是Knock Knock application with server and UI的详细内容,更多请关注web前端其它相关文章!

赞(0) 打赏
未经允许不得转载:web前端首页 » JavaScript 答疑

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

前端开发相关广告投放 更专业 更精准

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏