java网络编程技术例题详解

简介: java网络编程技术例题详解

👨‍💻个人主页@元宇宙-秩沅

**hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅!**

本文由 秩沅 原创

收录于专栏 java

⭐⭐
-


@[TOC]

题目

编写一个程序,实现客户端与服务器玩猜数字游戏:客户端和服务器建立套接字连接后,服务器向客户端发送一个1-100的随机数,用户将自己猜测的数数字发送给服务器,服务器向用户发送信息“猜大了”“猜小了”“猜对了”。运行结果如下图所示:

在这里插入图片描述

👨‍💻客户端类


package Client;

import java.io.*;
import java.net.*;
import java.util.*;

//客户端
public class Client {
   
   

     public static void main(String[] args) {
   
   
        Scanner scanner = new Scanner (System.in);  
        Socket mysocket = null ;         //声明套接字对象
        InetAddress address = null ;     //声明地址
        InetSocketAddress socketAddress = null ; //声明连接套接字地址的对象
        DataInputStream  input  = null ;  //数据输入流
        DataOutputStream output = null ; //数据输出流
        Thread readData ;               //线程
        Read readMess = null ;
        //1.建立信息连接阶段
        try {
   
   
            String IP ;  //ip地址
            int port ;     //端口
            mysocket = new Socket(); 
            readMess = new Read();
            readData = new Thread(readMess);   //将继承了runnable接口的read 作为参数传递 ,创建了负责读取信息的线程
            System.out.print("输入服务器的IP:");
            IP = scanner.nextLine(); 
            System.out.print("输入端口号:");
            port = scanner.nextInt();
            //判断是否连接
            if(mysocket.isConnected()) System.out.println("连接成功!");
            else {
   
   
                 address = InetAddress.getByName(IP);                     //获取服务的地址信息
                 socketAddress = new InetSocketAddress(address ,port);    //参数为服务器的地址信息和端口
                 mysocket.connect(socketAddress);                         //和网址信息进行连接
                 input = new DataInputStream (mysocket.getInputStream()); //将套接字对象得到的输入流流到"输入流大管道"
                 output =  new DataOutputStream (mysocket.getOutputStream()); //将套接字对象得到的输出流流到"输出流大管道"
                 readMess.setDataInputStream(input);                          //调用read里面的方法将输入流的信息传递
                 readData.start();                                             //启动读取数据的线程
            }
        }
        catch(Exception e)
        {
   
   
            System.out.println("服务器已断开"+ e);
        }
        //2.信息互动阶段
        System.out.println("请输入你的猜测结果:");
        while(scanner.hasNext()) //有输入就返回true
        {
   
   
            int gess = 0 ;
            try {
   
   
                gess = scanner.nextInt();   //赋予输入的信息
            }
            catch(InputMismatchException e)
            {
   
   
                System.exit(0);             //如有异常退出程序
            }
            //向服务器发送信息
            try {
   
   
                output.writeInt(gess);      //将猜测的结果发给服务器
            }
            catch(Exception e ) {
   
   }
        } 
    }
}

👨‍💻Read类


package Client;

import java.io.*;

//Read类
public class Read implements Runnable {
   
    

      DataInputStream input ;    //设置数据输入流大管道
      public void setDataInputStream( DataInputStream input) {
   
     
          this.input = input ;  //将从客户端得到的输入信息作为参数传递到Read类的输入信息管道内
      }
      @Override
     public void run() {
   
           //重写接口中的方法,该方法在线程启动时调用
         char result  ;
         while(true) {
   
   
             try {
   
   

                 result = input.readChar() ; //读取数据流中字符串信息
                 if(result=='D')
                 System.out.println("猜大了");
                 if(result=='X')
                 System.out.println("猜小了");
                 if(result=='P')
                 System.out.println("猜对了");
                 if(result=='L') {
   
    System.out.println("欢迎下次再来"); System.exit(0); }
                 System.out.println("请输入你的猜测结果:(按0退出客户端)");
             }
             catch(IOException e ) {
   
    
                 System.out.println("有异常,与服务器已断开"+ e);
                 break;
             }
         }
     }
    private void Switch() {
   
   
        // TODO Auto-generated method stub

    }

}

👨‍💻服务器类


package Client;

//服务器端
import java.io.*;
import java.net.*;
import java.util.Random;

public class Server {
   
   
             @SuppressWarnings("resource")
            public static void main(String[] args) {
   
   
                int port = 2022 ;                   //定义端口号  
                ServerSocket server = null ;        //作用是连接 两个端的Scoket对象
                ServerThread thread = null ;               //继承了Thread类的子类
                Socket boss = null ;
                while( true )
                {
   
   
                    try {
   
   
                        server = new ServerSocket(port); 
                    }
                    catch(IOException e)
                    {
   
   
                        System.out.println("正在进行监听中");
                    }
                    try {
   
   
                        System.out.println("即将建立连接");
                        boss = server.accept();         //将两个端口进行连接
                        System.out.println("连接成功,玩家的地址为:"+boss.getInetAddress());
                    }
                    catch(IOException e)
                    {
   
   
                        System.out.println("正在等待玩家连接");
                    }
                    //多线程服务
                    if(boss != null)
                      thread = new ServerThread(boss) ; //将服务端的套接口当参数传递进行有参构造
                      thread.start();                   //开启每个客户各拥有以和专门的线程,并调用run方法
                }

            }
}

class ServerThread extends Thread{
   
   

             Socket chakou ;
             DataOutputStream output = null ;
             DataInputStream   input = null ;
             ServerThread( Socket chakou )   //有参构造
             {
   
   
                 this.chakou = chakou ;
                 try {
   
   
                                        //获取传过来的套接口的输入输出管道中的数据
                     output = new DataOutputStream( chakou.getOutputStream());
                     input  = new DataInputStream(  chakou.getInputStream() );
                 }
                 catch(IOException e) {
   
    }
             }
             @Override
             public void run() {
   
         // 重写父类继承Runnable接口的方法 , 线程启动后会调用该方法

             while(true)
             {
   
   
                 try {
   
   
                       int gess = input.readInt();  //获取由客户端传来的数据流中整型的信息,既猜测的答案
                       Random R = new Random();
                       int a = R.nextInt(101)+1;  //生成 1到100的随机数
                       if(gess == 0)  output.writeChar('L');   //允许退出
                       if(gess > a)      output.writeChar('D'); //猜大了
                       else if(gess < a) output.writeChar('X'); //猜小了 
                       else              output.writeChar('P'); //猜对了
                 }
                 catch(IOException e  )
                 {
   
   
                     System.out.println("玩家已离开!");
                     return ;

                 }
             }

             }
}

你们的点赞👍 收藏⭐ 留言📝 关注✅是我持续创作,输出优质内容的最大动力!
请添加图片描述

目录
相关文章
|
25天前
|
存储 监控 安全
单位网络监控软件:Java 技术驱动的高效网络监管体系构建
在数字化办公时代,构建基于Java技术的单位网络监控软件至关重要。该软件能精准监管单位网络活动,保障信息安全,提升工作效率。通过网络流量监测、访问控制及连接状态监控等模块,实现高效网络监管,确保网络稳定、安全、高效运行。
48 11
|
11天前
|
负载均衡 网络协议 网络性能优化
动态IP代理技术详解及网络性能优化
动态IP代理技术通过灵活更换IP地址,广泛应用于数据采集、网络安全测试等领域。本文详细解析其工作原理,涵盖HTTP、SOCKS代理及代理池的实现方法,并提供代码示例。同时探讨配置动态代理IP后如何通过智能调度、负载均衡、优化协议选择等方式提升网络性能,确保高效稳定的网络访问。
79 2
|
1月前
|
XML Java 编译器
Java注解的底层源码剖析与技术认识
Java注解(Annotation)是Java 5引入的一种新特性,它提供了一种在代码中添加元数据(Metadata)的方式。注解本身并不是代码的一部分,它们不会直接影响代码的执行,但可以在编译、类加载和运行时被读取和处理。注解为开发者提供了一种以非侵入性的方式为代码提供额外信息的手段,这些信息可以用于生成文档、编译时检查、运行时处理等。
65 7
|
17天前
|
机器学习/深度学习 安全 网络安全
网络安全词云图与技术浅谈
### 网络安全词云图与技术浅谈 本文介绍了通过词云图展示网络安全关键术语的方法,并探讨了构建现代网络安全体系的关键要素。词云图利用字体大小和颜色突出高频词汇,如恶意软件、防火墙、入侵检测系统等。文中提供了生成词云图的Python代码示例,包括安装依赖库和调整参数。此外,文章详细讨论了恶意软件防护、加密技术、身份验证、DDoS防御、社会工程学防范及威胁情报等核心技术,强调了多层次、多维度的安全策略的重要性。
56 11
网络安全词云图与技术浅谈
|
17天前
|
移动开发 前端开发 Java
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
|
3天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
1月前
|
存储 安全 网络安全
云计算与网络安全:技术融合的双刃剑
在数字化浪潮中,云计算如同一股不可阻挡的力量,推动着企业和个人用户步入一个高效、便捷的新时代。然而,随之而来的网络安全问题也如影随形,成为制约云计算发展的阿喀琉斯之踵。本文将探讨云计算服务中的网络安全挑战,揭示信息保护的重要性,并提供实用的安全策略,旨在为读者呈现一场技术与安全的较量,同时指出如何在享受云服务带来的便利的同时,确保数据的安全和隐私。
29 6
|
1月前
|
存储 人工智能 安全
云计算与网络安全:技术融合与挑战
在数字化时代的浪潮中,云计算和网络安全已成为推动社会进步的两大关键技术。本文将探讨云计算服务的发展,网络安全的重要性,以及信息安全技术的演进。我们将通过实例分析,揭示云服务如何增强数据保护,网络安全措施如何应对新兴威胁,以及信息安全技术的创新如何为企业带来竞争优势。文章旨在为读者提供对云计算和网络安全领域的深入理解,并展示它们如何共同塑造我们的未来。
|
1月前
|
监控 安全 网络安全
云计算与网络安全:技术挑战与解决方案
随着云计算技术的飞速发展,其在各行各业的应用越来越广泛。然而,随之而来的网络安全问题也日益凸显。本文将从云服务、网络安全和信息安全等技术领域出发,探讨云计算面临的安全挑战及相应的解决方案。通过实例分析和代码示例,旨在帮助读者更好地理解云计算与网络安全的关系,提高网络安全防护意识。
|
1月前
|
JavaScript 安全 Java
java版药品不良反应智能监测系统源码,采用SpringBoot、Vue、MySQL技术开发
基于B/S架构,采用Java、SpringBoot、Vue、MySQL等技术自主研发的ADR智能监测系统,适用于三甲医院,支持二次开发。该系统能自动监测全院患者药物不良反应,通过移动端和PC端实时反馈,提升用药安全。系统涵盖规则管理、监测报告、系统管理三大模块,确保精准、高效地处理ADR事件。