[ Java ] Socket 实现猜数字小游戏!!!

2023-05-16

记一次作业

运行截图

  • Server
    在这里插入图片描述
  • Client
    在这里插入图片描述

完整代码

  • Server
import java.io.IOException;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Random;
import java.util.Scanner;

public class ServerDemo {
    private int flag;

    public void server() throws IOException {
        //创建一个服务器
        System.out.println("服务端启动,等待客户端连接。。。");
        PrintWriter out = null;
        Scanner getClient = null;
        ServerSocket server = null;
        Socket client = null;
        this.setFlag();
        try {
            server = new ServerSocket(6666);
            //创建一个接收连接客户端的对象
            client = server.accept();
            System.out.println(client.getInetAddress() + " 已成功连接到此台服务器上。");
            //字符输出流
            out = new PrintWriter(client.getOutputStream());    //向客户端发送数据
            out.println("欢迎来到猜数字小游戏(1-100)!!!");
            out.flush();//将缓冲流中的数据全部输出
            getClient = new Scanner(client.getInputStream());  //接收客户端发送的数据
            //阻塞等待客户端发送消息过来
            while (getClient.hasNextLine()) {
                String returnMsg = null;
                String tmp = getClient.nextLine();
                if ("e".equals(tmp)) {
                    break;
                } else if ("c".equals(tmp)) {
                    returnMsg = "欢迎来到新一轮的猜数字小游戏(1-100)!!!";
                    this.setFlag();
                } else {
                    int clientInput = Integer.parseInt(tmp);

                    if (clientInput > flag) {
                        returnMsg = "你输入的数字大了!!!";
                    } else if (clientInput < flag) {
                        returnMsg = "你输入的数字小了!!!";
                    } else {
                        returnMsg = "恭喜你,猜中了!!!继续(输入c),退出(输入e)";
                    }
                }
                out.println(returnMsg); //向客户端发送数据
                out.flush();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            out.close();
            getClient.close();
            server.close();
        }
    }

    // 生成随机数字
    public void setFlag() {
        Random r = new Random();
        flag = r.nextInt(100);
        System.out.println("猜数字小游戏答案:flag = " + flag);
    }

    public static void main(String[] args) throws IOException {
        new ServerDemo().server();
    }
}

  • Client
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class ClientDemo {

    public void client() throws IOException {
        System.out.println("正在向服务器请求连接。。。");
        Socket client = null;
        Scanner getKey = null;
        Scanner getServer = null;
        PrintWriter out = null;
        try {
            client = new Socket("127.0.0.1", 6666);
            getServer = new Scanner(client.getInputStream());
            System.out.println(getServer.nextLine());
            out = new PrintWriter(client.getOutputStream());
            System.out.print("请输入数字:");
            //先读取键盘录入方可向服务端发送消息
            getKey = new Scanner(System.in);
            while (getKey.hasNextLine()) {
                //写到服务端的的控制台
                out.println(getKey.nextLine());
                out.flush();
                try {
                    System.out.println("提示消息:" + getServer.nextLine());
                    System.out.print("请输入数字:");
                } catch (Exception e) {
                    System.out.print("游戏结束!!!");
                    break;
                }
                //阻塞等待接收服务端的消息
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            getKey.close();
            getServer.close();
            out.close();
            client.close();
        }

    }

    public static void main(String[] args) throws IOException {
        new ClientDemo().client();
    }
}


在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[ Java ] Socket 实现猜数字小游戏!!! 的相关文章

  • TF-IDF

    1 TF IDF是什么 xff1f TF IDF xff1a term frequency inverse document frequency 1 tf idf 作为一种权重经常被用作信息检索和文本挖掘领域 2 这样一种权重时通过统计计算
  • 搭建STP生成树协议访问服务器

    拓扑图 xff1a 理解 1 确定交换机的角色 xff1a 根交换机 非根交换机 xff0c 比较原则优选级 xff0c 越小越好 xff1b 其次比较MAC地址 xff0c 越小越好 xff1b 2 确定端口的角色 xff1a 根端口 指
  • Hexo博客绑定自己的域名

    1 购买域名 国内的域名服务商有新网 xff0c 腾讯云 xff0c 还有阿里云的万网等 我用的是阿里云 在万网购买了的域名后 xff0c 进入阿里云的管理控制台 域名与网站 域名就可以看到购买的域名此时的域名状态是未实名认证的 xff0c
  • MATLAB学习之图片放大缩小(双线性插值法)

    MATLAB学习之图片放大缩小 这是数字图像处理实验内容 xff0c 老师规定用双线性插值法进行放大缩小 xff0c 不过双线性插值法也太难了吧 xff01 xff01 xff01 代码如下 xff1a span class token o
  • Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?报错

    在linux上使用apt get方式安装nginx时提示Unable to fetch some archives maybe run apt get update or try with fix missing 最后发现是源出现了问题 v
  • chrony

    CentOS8 时间同步服务 CentOS7之前的版本用的是ntpdate服务 xff0c 之后用的是chrony服务 默认是安装的了 查看版本 root 64 centos8 rpm qi chrony Name chrony Versi
  • 网易云音乐(netease-cloud-music)无法通过图标打开,只能用命令行开启

    解决办法 xff08 两种任选其一 xff09 xff1a 1 打开文件桌面图标文件netease cloud music desktop xff1a sudo gedit usr share applications netease cl
  • java: 程序包org.apache.ibatis.annotations不存在

    这个错误是我在直接导入springboot项目的时候报错的 xff0c 解决方法是新建一个spring项目 xff0c 之后将相关文件导入该项目中解决的 导入项目出现错误时可以考虑这样处理一下试试
  • angularJS中把html格式的字符串转成html格式显示,ng-bind-html与trustAsHtml的过滤器

    分享一下我老师大神的人工智能教程 xff01 零基础 xff0c 通俗易懂 xff01 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 xff0c 造福人民 xff0c 实现我们中华民族伟大
  • 【设计模式】生产者消费者模型

    带你轻松理解生产者消费者模型 xff01 生产者消费者模型可以说是同步与互斥最典型的应用场景了 xff01 文末附有模型简单实现的代码 xff0c 若有疑问可私信一起讨论 文章目录 一 xff1a 为什么要使用生产者消费者模型 xff1f
  • matlab的for循环

    a span class token operator 61 span span class token function rand span span class token punctuation span span class tok
  • 论文笔记之 Collaborative Deep Learning for Recommender Systems

    这篇论文是KDD2015的一篇用DL去做RS的论文 想法挺有意思的 看过论文的同学都知道整体的模型可以用下图表示 xff1a 这里只讲讲整体的思路与理解 xff1a 1 xff09 这是一个CF和CBF结合用bayes去做 2 xff09
  • QGC地面站参数调节

    校准 xff1a 1 选择机架 xff1a 一般用DJI Flame Wheel F450机架 xff0c 选择之后点击 应用并重启 xff1b 2 传感器校准 xff1a 无人机会重新连接地面站 xff0c 依次校准 磁罗盘 陀螺仪 xf
  • 【Java】线程超时(设置一段代码执行超时时间)

    引用原文 xff1a https blog csdn net educast article details 51864912 代码 public class ThreadTest public static void main Strin
  • HDFS入门简介

    HDFS是什么 xff1f 易于扩展的分布式文件系统运行在大量普通廉价机器上提供容错机制为大量用户提供性能不错的存取服务 设计目标 xff1a 自动快速检测应对硬件错误流式访问数据 以流的方式访问数据 xff0c 设计用于数据的批量处理 缺
  • Android对于Fragment的使用以及底部导航栏问题

    fragment 一直提示fragment类型不对 该错误是在我们创建的fragment类文件中导错了包 底部导航栏不显示文字 在该处加上app labelVisibilityMode 61 34 labeled 34 就可以全部显示了 原
  • 建立个人网站1:腾讯云域名购买,域名解析以及使用GitHub初步搭建网站

    建立个人网站1 申请域名 xff0c 域名解析以及使用GitHub初步显示 腾讯云的学生优惠申请了一个域名 然后用了GitHub的服务器搭了网站 xff0c github优点是不用备案 xff0c 域名解析把GitHub的个人域名复制过来就
  • SQL语句快查

    SQL语句 0 MYSQL登陆 mysql u root p 1 创建数据库 span class token keyword CREATE span span class token keyword DATABASE span span
  • Numpy 数据类型及转换

    今天写代码遇到数据类型相关的问题 xff0c 记忆不是很清楚 xff0c 所以总结归纳了一下 NumPy 数据类型 名称描述bool 布尔型数据类型 xff08 True 或者 False xff09 int 默认的整数类型 xff08 类
  • 安装phantomjs-prebuilt失败(已解决)

    今天使用 pyecharts snapshot 插件需要安装 phantomjs xff0c 结果报了下面得错误 xff0c 我不快乐了 xff1a 解决方法一 xff1a sudo npm i nrm g 安装nrm nrm 查看使用方法

随机推荐