600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Java Socket编程系列(三)开发支持单客户端访问的Server

Java Socket编程系列(三)开发支持单客户端访问的Server

时间:2020-04-15 17:37:36

相关推荐

Java Socket编程系列(三)开发支持单客户端访问的Server

例子来自Java官方教程,稍作调整。

实现的是单个客户端请求服务端,根据服务端提示进行一系列操作。

协议类:

package com.dylan.socket;/*** @authorxusucheng* @create -12-24**/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;elsecurrentJoke++;state = SENTKNOCKKNOCK;} else {theOutput = "Bye.";state = WAITING;}}return theOutput;}}

服务器端:

package com.dylan.socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import .ServerSocket;import .Socket;/*** @authorxusucheng* @create -12-24**/public class KnockKnockServer {private static final int PORT = 8858;public static void main(String[] args) throws IOException {/*if (args.length != 1) {System.err.println("Usage: java KnockKnockServer <port number>");System.exit(1);}int portNumber = Integer.parseInt(args[0]);*/try (ServerSocket serverSocket = new ServerSocket(PORT);Socket clientSocket = serverSocket.accept();PrintWriter out =new PrintWriter(clientSocket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));) {String inputLine, outputLine;// Initiate conversation with clientKnockKnockProtocol 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;}} catch (IOException e) {System.out.println("Exception caught when trying to listen on port "+ PORT + " or listening for a connection");System.out.println(e.getMessage());}}}

客户端:

package com.dylan.socket;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import .Socket;import .UnknownHostException;/*** @authorxusucheng* @create -12-24**/public class KnockKnockClient {private static final String HOST="127.0.0.1";private static final int PORT=8858;public static void main(String[] args) throws IOException {/*if (args.length != 2) {System.err.println("Usage: java EchoClient <host name> <port number>");System.exit(1);}String hostName = args[0];int portNumber = Integer.parseInt(args[1]);*/try (Socket kkSocket = new Socket(HOST, PORT);PrintWriter out = new PrintWriter(kkSocket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream()));) {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);}}} catch (UnknownHostException e) {System.err.println("Don't know about host " + HOST);System.exit(1);} catch (IOException e) {System.err.println("Couldn't get I/O for the connection to " +HOST);System.exit(1);}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。