首页 > 编程语言 >java 网络知识 + 多线程问题

java 网络知识 + 多线程问题

时间:2024-10-12 13:50:32浏览次数:3  
标签:java socket 知识 System String println new 多线程 out

服务器:

package p1007;

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

public class Server {
    public static void main(String[] args) {
        int port = 12345; // 服务端口
        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("服务器已启动,等待客户端连接...");
            while (true) {
                Socket socket = serverSocket.accept();
                System.out.println("客户端连接: " + socket.getInetAddress());
                new ClientHandler(socket).start(); // 为每个客户端连接启动一个新线程
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

class ClientHandler extends Thread {
    private Socket socket;

    public ClientHandler(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        try (BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true)) {

            Random random = new Random();
            int num1 = random.nextInt(100);
            int num2 = random.nextInt(100);
            int correctAnswer = num1 + num2;

            out.println("请计算: " + num1 + " + " + num2 + " = ?");

            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                try {
                    int userAnswer = Integer.parseInt(inputLine);
                    if (userAnswer == correctAnswer) {
                        out.println("回答正确!连接结束。");
                        System.out.println(socket.getInetAddress()+"回答正确!连接结束。");
                        out.println("结束");
                        System.out.println(socket.getInetAddress()+"结束");
                        break;
                    } else {
                        System.out.println(socket.getInetAddress()+"错误,请再试一次:");
                        out.println("错误,请再试一次:");
                    }
                } catch (NumberFormatException e) {
                    out.println("无效输入,请输入一个数字。");
                    System.out.println(socket.getInetAddress()+"无效输入,请输入一个数字。");
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

客服机:

package p1007;

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

public class Client {
    public static void main(String[] args) {
        String serverAddress = "localhost"; // 服务器地址
        int port = 12345; // 服务器端口

        try (Socket socket = new Socket(serverAddress, port);
             BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
             BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in))) {

            String serverMessage;
            while ((serverMessage = in.readLine()) != null) {
                System.out.println("服务器: " + serverMessage);
                if(serverMessage.equals("回答正确!连接结束。"))
                    break;
                System.out.print("您的答案: ");
                String answer = userInput.readLine();
                out.println(answer); // 发送用户的答案
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("结束");
    }
}

标签:java,socket,知识,System,String,println,new,多线程,out
From: https://blog.csdn.net/laocooon/article/details/142739463

相关文章

  • java 文件的建立,文件夹的建立, 删除
    importjava.io.File;importjava.io.IOException;publicclassFileTest{publicstaticvoidmain(String[]args)throwsIOException{//请在Begin-End间编写完整代码/**********Begin**********///创建目录Filefile=n......
  • 软考攻略/超详细/系统集成项目管理工程师/基础知识分享13
    5.3软件设计(掌握)        需求阶段解决“做什么”的问题,而软件设计阶段解决“怎么做”的问题。软件设计分为结构化设计与面向对象设计。5.3.1结构化设计(掌握)        结构化设计(SD)是一种面向数据流的方法,其目的在于确定软件结构。它以SRS和SA阶段所产生的D......
  • Flink知识体系保姆级总结
    Flink涉及的知识点如下图所示,本文将逐一讲解:本文档参考了 Flink的官网及其他众多资料整理而成,为了整洁的排版及舒适的阅读,对于模糊不清晰的图片及黑白图片进行重新绘制成了高清彩图。一、Flink简介1.Flink发展这几年大数据的飞速发展,出现了很多热门的开源社区,其中......
  • JavaScript
    什么是JavaScript?Web标准也称为网页标准,由一系列的标准组成,大部分由W3C(WorldWideWebConsortium,万维网联盟)负责制定。三个组成部分:HTML:负责网页的基本结构(页面元素和内容)。CSS:负责网页的表现效果(页面元素的外观、位置等页面样式,如:颜色、大小等)。JavaScript:负责网页的......
  • OpenLayers基础知识回顾(一)
    一、一张地图的构成从数据表现在页面来说点、线、面从数据类型来说矢量数据:放大后不会失真栅格数据:放大后会失真,这种数据是由一个个的像素点组成的从图层来说一张地图由很多图层组成,图层有zIndex参数,可以用于设置图层堆叠顺序图层:将同一类型的要素,放在一个图层......
  • PTA 作业六 JAVA 面向对象程序设计6-2 sdut-oop-list-1 学生集合(类、集合)作者 周雪芹
    6-2sdut-oop-list-1学生集合(类、集合)分数15作者 周雪芹单位 山东理工大学以下程序不完整,请你根据已经给出的程序代码中表达的题意,以及程序的输入、输出信息,完成Student类的设计,补全代码。函数接口定义:classStudent{}裁判测试程序样例:importjava.util.ArrayLi......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript购物商城(篮球)
    HTML+CSS+JS【购物商城】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • 立创eda 入门 基础知识和数据手册阅读
    引入知识PCB印刷电路版 连接链接元件电阻元件 色环电阻4(黄)7(紫)0(黑)*0.1(金)=47欧姆误差1%(棕) 根据颜色三位或四位(前几位是欧姆数10的n次方n为最后一位)贴片电阻如普中单片机为102转化为10*10*10=1000蓝桥杯单片机为1002转化为100*10*10=10000......
  • 大学生HTML期末大作业——HTML+CSS+JavaScript培训机构(英语教育)
    HTML+CSS+JS【培训机构】网页设计期末课程大作业web前端开发技术web课程设计网页规划与设计......
  • Java 内存的使用流程与机制
    Java的内存结构(MemoryStructure)是Java虚拟机(JVM)在运行时管理内存的方式,它直接关系到Java程序的性能和运行的稳定性。Java的内存结构可以总结为以下几个关键部分:堆内存:存储对象和数组,是垃圾回收的主要目标。栈内存:存储局部变量、方法调用栈帧,线程私有。方法区:存储类......