您的位置 首页 java

java实现Socket一对多问答型服务器

/**

* 实现一对多问答型服务器

* 一个服务器对多个客户端,与每一个客户端一对一通信

*/

public class QAndAServer1 {

public static void main(String[] args) {

try {

Server socket ss = new ServerSocket(8888);

System.out.println(“服务器已启动,等待连接中”);

while (true){

new AutoAnswer(ss.accept()).start();

//死循环,不断监听8888端口,每收到一个连接后创建一个自动回复线程来处理,服务器永不关闭

}

} catch (IO Exception e) {

throw new RuntimeException(e);

}

}

}

class AutoAnswer extends Thread{

final private Socket socket;

public AutoAnswer(Socket socket) {

this.socket = socket;

//服务器将每一个客户端的连接传入一个新的 线程 对象中

}

public static String answerOf(String question){

if (question.matches(“.*([你好]|ni|hao|hello|hi|[在吗]|亲|[有人吗]|[早中晚上]).*”)){

return “你好啊”;

}

if (question.matches(“.*[吃了吗什么的].*”)) {

return “我没吃,你呢”;

}

if (question.matches(“.*[问题?请?怎么办].*”)) {

return “这边会为您进行反馈,请耐心等待结果”;

}

if (question.matches(“.*[bye再见退出Exit关闭].*”)){

return “”;

}

return “我不懂你的意思,请再说一遍”;

}

@Override

public void run() {

try(PrintWriter pw = new PrintWriter(socket.getOutputStream(),true);

BufferedReader br = new BufferedReader(new InputStream Reader(socket.getInputStream()))) {

System.out.println(“收到客户端”+socket.getInetAddress()+”的连接,通信已开始”);

pw.println(“您好,人工智障”+this.getName().split(“-“)[1]+”号机为您服务,您请说: “);

//线程默认名字为 Thread -数字,用-分割取1位为数字

while (true){

String answer = answerOf(br.readLine());

if (“”.equals(answer)){

pw.println(“再见~”);

break;

}

pw.println(answer);

}

System.out.println(“与客户端”+socket.getInetAddress()+”的通信结束”);

} catch (IOException e) {

throw new RuntimeException(e);

}

try {

socket.close();

//在线程内将连接关闭

} catch (IOException e) {

throw new RuntimeException(e);

}

}

}

文章来源:智云一二三科技

文章标题:java实现Socket一对多问答型服务器

文章地址:https://www.zhihuclub.com/200644.shtml

关于作者: 智云科技

热门文章

网站地图