首页 > 编程语言 >网络程序设计-1

网络程序设计-1

时间:2023-03-07 20:35:51浏览次数:39  
标签:java import 客户机 网络 System new 程序设计 cltout

实验一

实验要求:

脑筋急转弯1.0版
编程要求:
1.服务器出5~10道脑筋急转弯题目,客户机回答。服务器要能判断客户机回答的正确与否。
2.服务器和客户机均采取java控制台编程模式。无论是输入流还是输出流,都使用三层复合流。
3.服务器端编程时,将5道脑筋急转弯题目放置于数组内,并通过循环方式向客户机发出问题和判断客户机回答的正确与否。
4.客户机编程时,回答问题采取循环方式,当接到服务器发出的“问答结束”信息后结束循环并退出问答。
5.采用客户机/服务器一对一通信模型,所编写的程序必须在组内的成员之间通过单独一台主机做服务器,另外一台主机做客户机的方式通过测试。

客户端:

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;

public class client {
    public static void main(String[] args) {
        try (
                //1.请求连接服务器
                Socket socket = new Socket("127.0.0.1", 2020);

                //2.初始化三个信息流:从键盘输入的输入流,从服务器传送过来的输入流,向服务器发送的输出流
                //2.1 从键盘读取的输入流
                BufferedReader kbdin = new BufferedReader(new InputStreamReader(System.in)); //keyboard input
                //2.2 从服务器传送过来的输入流
                BufferedReader srvin = new BufferedReader(new InputStreamReader(socket.getInputStream())); //server input
                //2.3 向服务器发送的输出流
                BufferedWriter srvout = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //server output
        ) {
            //3.连接成功
            System.out.println("与服务器连接成功!");

            //4.开始回答
            System.out.println("请直接输入你的回答,不用理会光标的位置!");
            while (true) {
                //4.1 从服务器读取问题
                String question=srvin.readLine();
                if(question.equals("问答结束")) {
                    System.out.println("回答问题结束喽!");
                    break; //回答问题结束,则跳出循环
                }
                System.out.println(question); //显示问题

                //4.2 循环回答每一个问题
                String answer=kbdin.readLine(); //从键盘读取回答
                srvout.write(answer); //把答案向服务器发出去
                srvout.newLine();  //结束一行信息
                srvout.flush();  //推送缓冲区内容

                //4.3 接收服务器发来的对错结果
                String result=srvin.readLine();
                System.out.print("服务器发送的判断结果:");
                System.out.println(result);
            }
        } catch (IOException e) {
            System.out.println("亲,服务器不理我:(..." + e);
        }
    }

}

客户端的代码并没有改动,因为实验的要求主要是让我们改动服务器端的代码,那让我们看服务端的代码。

服务端:

原始代码:

package server;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class AskServer {
    public static void main(String args[]) {
        try(
                //1.服务器端口建立并开始监听
                ServerSocket server = new ServerSocket(2020); //在2020端口建立连接            
                Socket socket = server.accept(); //服务器阻塞 
                
                //2.初始化两个信息流:从客户机传送过来的输入流,向客户机发送的输出流                
                //2.1 从客户机传送过来的输入流
                BufferedReader cltin = new BufferedReader(new InputStreamReader(socket.getInputStream())); //client input
                //2.2 向客户机发送的输出流
                BufferedWriter cltout = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //client output
        ){
            System.out.println("已经和客户机建立连接!!!");            
            //3.1 提出第一个问题
            cltout.write("问题1:你所在的学校?");
            cltout.newLine();  //结束一行信息
            cltout.flush();  //清空缓冲区,其实就是将缓冲区的数据推送出去
            //3.2 接收第一个回答
            String answer=cltin.readLine(); //阻塞,等待输入流
            System.out.println("问题1:你所在的学校?");
            System.out.println("客户机的回答:"+answer);
            
            String response;
            if(answer.equals("宁夏大学")) {
                response="答对啦!";
            }
            else {
                response="错喽!!!";
            }
            //3.3 返回对第一个问题的判断
            cltout.write(response);
            cltout.newLine(); 
            cltout.flush();
            
            //4.1 提出第二个问题
            cltout.write("问题2:你所在的学院?");
            cltout.newLine();  
            cltout.flush();  
            //4.2 接收第二个回答
            answer=cltin.readLine();          
            System.out.println("问题2:你所在的学院?");
            System.out.println("客户机的回答:"+answer);
            
            if(answer.equals("信息工程学院")) {
                response="答对啦!";
            }
            else {
                response="错喽!!!";
            }
            //4.3 返回对第二个问题的判断
            cltout.write(response);
            cltout.newLine(); 
            cltout.flush();
            
            //5.1 提出第三个问题
            cltout.write("问题3:你所在的系?");
            cltout.newLine();  
            cltout.flush();   
            //5.2 接收第三个回答
            answer=cltin.readLine();     
            System.out.println("问题3:你所在的系?");
            System.out.println("客户机的回答:"+answer);
            
            if(answer.equals("网络工程")) {
                response="答对啦!";
            }
            else {
                response="错喽!!!";
            }
            //5.3 返回对第三个问题的判断
            cltout.write(response);
            cltout.newLine(); 
            cltout.flush();
            
            //6 发出结束问答信息
            cltout.write("问答结束");
            cltout.newLine(); 
            cltout.flush();
            
            System.out.println("问答结束!");
        }catch(IOException e) {
             System.out.println("发生了网络错误!" + e);
        }        
    }
}

实验要求:

import java.io.BufferedReaimport java.io.BufferedWriter;
import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class server { public static void main(String args[]) { try( //1.服务器端口建立并开始监听 ServerSocket server = new ServerSocket(2020); //在2020端口建立连接 Socket socket = server.accept(); //服务器阻塞 //2.初始化两个信息流:从客户机传送过来的输入流,向客户机发送的输出流 //2.1 从客户机传送过来的输入流 BufferedReader cltin = new BufferedReader(new InputStreamReader(socket.getInputStream())); //client input //2.2 向客户机发送的输出流 BufferedWriter cltout = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); //client output ){ System.out.println("已经和客户机建立连接!!!"); //写入问题
       //这里从1开始数组是因为后面的生成随机数时是1-10,为了对应下标,比较简单一点
String[] str = new String[11]; str[1]="什么东西在倒立之后会增加一半?"; str[2]="冰变成水最快的方法是什么?"; str[3]="在什么时候1+2不等于3?"; str[4]="一只凶猛的饿猫,看到老鼠,为何拔腿就跑?"; str[5]="小王走路从来脚不沾地,这是为什么? "; str[6]="小王一边刷牙,一边悠闲的吹着口哨,他是怎么做到的?"; str[7]=" 黑人和白人生下的婴儿,牙齿是什么颜色?"; str[8]="你能否用3跟筷子搭起一个比3大比4小的数?"; str[9]="最不听话的是谁?"; str[10]=" 什么东西晚上才生出尾巴呢?"; //写入答案 String[] str1 = new String[11]; str1[1]="6"; str1[2]="去掉冰字哪二点"; str1[3]="算错了的时候"; str1[4]="跑去追老鼠"; str1[5]="因为穿着鞋子"; str1[6]="刷假牙"; str1[7]="婴儿没有牙"; str1[8]="搭成圆周率∏"; str1[9]="聋子"; str1[10]="流星"; //定义一个数组,这个数组自动生成5个1-10之间不重复的随机数 int[] arr = new int[5]; //向数组中赋值 for(int i = 0;i< 5;i++){ //欲赋的值 arr[i] = (int)(Math.random() * 10) + 1; //遍历数组中是否有与欲赋值相等的元素 for(int j = 0;j < i;j++){ if(arr[i] == arr[j]){ //当查询到数组中有元素与欲赋值相等时,i--,跳出循环,并重新给arr[i]赋值 i--; break; } } } for(int j=1;j<6;j++){ cltout.write("问题"+j+":"+str[arr[j-1]]); cltout.newLine(); //结束一行信息 cltout.flush(); //清空缓冲区,其实就是将缓冲区的数据推送出去 //3.2 接收第一个回答 String answer=cltin.readLine(); //阻塞,等待输入流 System.out.println("问题"+j+":"+str[arr[j-1]]); System.out.println("客户机的回答:"+answer); String response; if(answer.equals(str1[arr[j-1]])) { response="答对啦!"; } else { response="错喽!!!"; } //3.3 返回对判断 cltout.write(response); cltout.newLine(); cltout.flush(); } //6 发出结束问答信息 cltout.write("问答结束"); cltout.newLine(); cltout.flush(); System.out.println("问答结束!"); }catch(IOException e) { System.out.println("发生了网络错误!" + e); } } }

可以发现我们把原来的依次输出三个问题,改成了利用循环依次输出5个问题(其他的东西我都写到代码的注释里了,大伙自己看啊),改动的地方其实也就是加了一个能自动生成随机数的循环。

 

标签:java,import,客户机,网络,System,new,程序设计,cltout
From: https://www.cnblogs.com/yaolingyu/p/17189514.html

相关文章

  • 汉源高科4路百兆网络带1路双向485数据通讯转光纤收发器网口光端机红绿灯控制光端机
    ......
  • VMware 16 Pro CentOS 7 网络配置
    一、虚拟机Nat模式和桥接模式区别NAT模式1.NAT网络连接形式,内部的虚拟机ip地址必须是前三位和NAT保持一致,才会连接外网。2.NAT模式下的多个虚拟机是可以互通的。3.NAT......
  • 详解神经网络中反向传播和梯度下降
    摘要:反向传播指的是计算神经网络参数梯度的方法。本文分享自华为云社区《反向传播与梯度下降详解》,作者:嵌入式视觉。一,前向传播与反向传播1.1,神经网络训练过程神经网......
  • IP地址,主机号,网络号,子网掩码,网关,端口等相关概念
    IP地址=网络地址+主机地址,又称网络号和主机号构成。A类:以0开头,第1字节为网络地址+后3个字节主机地址组成,地址范围0.0.0.0~127.255.255.255。可用的A类网络有126个网络......
  • HCIP-网络类型及数据链路层协议
    前言:网络类型是根据我们数据链路层所运行的协议及规则来划分。网络类型的分类P2P----点到点---pointtopointMA---多点接入网络BMA---广播型多点接入网络NBM......
  • K8S内部网络通信是如何实现的?
    在本文中,我们将探讨GoogleKubernetesEngine(GKE)的网络组件以及现有的各种选项。Kubernetes是一个用于管理容器化工作负载和服务的开源平台,而GKE是一个完全托管的环......
  • 网络安全实践笔记
    网络安全实践密码学概述通信中的参与者发送者(Alice,爱丽丝):在双方交互中合法的信息发送实体。接受者(Bob,鲍勃):在双方交互中合法的信息接受实体。分析者(Eve,伊夫):破坏接受......
  • 网络硬件基础理论
    一、概述最近再学习的过程中感觉网络是特别的重要,所以想重新温习一遍网络方面的基础知识网络通信的一些介质:双绞线、集线器、网桥、交换机、路由器IP地......
  • 计算机网络概述
    《计算机网络历史》1969年,首先是单个网络ARPANET向互连网的发展,即internet(互连网),多个计算机网络互连而成的计算机网络那个时候还没有规定的通信标准(协议......
  • 网络安装Debian在国内很慢的问题
    在国内使用网络安装的方式安装Debian会非常的慢,虽然选择了国内的源但问题依旧。导致这一问题的核心原因是:虽然选择的了国内源,但软件源中的安全源地址仍然是官方源。这……......