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 ;

                 }
             }

             }
}

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

目录
相关文章
|
16天前
|
存储 安全 网络安全
云计算与网络安全:技术融合的未来之路
【10月更文挑战第30天】在数字化浪潮的推动下,云计算已成为企业信息技术架构的核心。然而,随之而来的网络安全问题也日益凸显。本文将探讨云计算与网络安全的关系,分析云服务中的安全挑战,并提出相应的解决方案。我们将通过实例展示如何在云计算环境中实现网络安全的最佳实践,以期为读者提供一条技术融合的未来之路。
|
7天前
|
云安全 安全 网络安全
云计算与网络安全:技术挑战与解决策略
【10月更文挑战第39天】随着云计算技术的飞速发展,网络安全问题也日益凸显。本文将探讨云计算环境下的网络安全挑战,并提出相应的解决策略。通过分析云服务模型、网络安全威胁以及信息安全技术的应用,我们将揭示如何构建一个安全的云计算环境。
|
7天前
|
存储 网络协议 安全
30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场
本文精选了 30 道初级网络工程师面试题,涵盖 OSI 模型、TCP/IP 协议栈、IP 地址、子网掩码、VLAN、STP、DHCP、DNS、防火墙、NAT、VPN 等基础知识和技术,帮助小白们充分准备面试,顺利踏入职场。
21 2
|
8天前
|
云安全 安全 网络安全
云计算与网络安全:技术融合的未来之路
【10月更文挑战第38天】 在数字化浪潮中,云计算和网络安全成为支撑现代企业和个人数据安全的两大基石。本文将深入探讨云计算服务如何与网络安全技术相结合,保障信息安全,并分析面临的挑战及未来发展趋势。我们将通过实际案例,揭示云安全的最佳实践,为读者提供一条清晰的技术融合路径。
|
9天前
|
安全 网络安全 数据库
云计算与网络安全:技术融合的未来之路
【10月更文挑战第37天】本文将探讨云计算与网络安全的交汇点,揭示它们如何共同塑造信息安全的未来。我们将深入了解云服务的核心组件、网络安全的关键策略以及两者如何相互增强。通过分析当前的挑战和未来的趋势,本文旨在为读者提供一条清晰的路径,以理解并应对这一不断发展的技术领域。
|
10天前
|
网络协议 数据挖掘 5G
适用于金融和交易应用的低延迟网络:技术、架构与应用
适用于金融和交易应用的低延迟网络:技术、架构与应用
38 5
|
11天前
|
存储 安全 网络安全
云计算与网络安全:技术融合与挑战
【10月更文挑战第35天】本文将探讨云计算与网络安全的交叉点,包括云服务、网络安全和信息安全等技术领域。我们将深入了解云计算的基本概念,以及如何通过云服务实现网络安全和信息安全。同时,我们还将讨论云计算面临的安全挑战,并提出相应的解决方案。最后,我们将通过代码示例展示如何在云计算环境中实现网络安全和信息安全。
25 3
|
12天前
|
存储 安全 网络安全
云计算与网络安全:云服务、网络安全、信息安全等技术领域的深度剖析
【10月更文挑战第34天】本文将深入探讨云计算与网络安全的关系,包括云服务、网络安全、信息安全等技术领域。我们将通过实例和代码示例,解析云计算如何改变网络安全的格局,以及如何在云计算环境下保护信息安全。我们将从云计算的基本概念开始,然后深入到网络安全和信息安全的主题,最后通过代码示例来展示如何在云计算环境下实现网络安全和信息安全。
|
13天前
|
供应链 安全 网络安全
区块链技术与网络安全:机遇与挑战
区块链技术与网络安全:机遇与挑战
42 2
|
14天前
|
机器学习/深度学习 移动开发 自然语言处理
HTML5与神经网络技术的结合有哪些其他应用
HTML5与神经网络技术的结合有哪些其他应用
31 3