【Java】网络编程-TCP回显服务器代码编写

前面我们讲了基于UDP的网络编程

UDP回显服务器 

UDP字典服务器 

下面我们来讲基于TCP的回显服务编写

1、服务器

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {
    private static ServerSocket socket = null;

    public Server(int port) throws IOException {
        socket = new ServerSocket(port);
    }

    public static void start() throws IOException {
        System.out.println("服务器端启动!");
        //使用多线程的方式,可以与多个客户端连接
        while (true){
            Socket clientSocket = socket.accept();
            Thread thread = new Thread(()->{
                try {
                    procession(clientSocket);
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            });
            thread.start();
        }
    }

    public static void procession(Socket clientSocket) throws IOException {
        System.out.printf("[%s:%d] 客户端上线!",clientSocket.getInetAddress(),clientSocket.getPort());
        System.out.println();
        //TCP使用的是I/O流
        try (InputStream inputStream = clientSocket.getInputStream();
             OutputStream outputStream = clientSocket.getOutputStream();)
        {
            while (true){
                Scanner scanner = new Scanner(inputStream);
                if (!scanner.hasNext()){
                    System.out.printf("[%s:%d] 客户端下线",clientSocket.getInetAddress(),clientSocket.getPort());
                    System.out.println();
                    break;
                }
                String request = scanner.next();
                String response = process(request);

                PrintWriter writer = new PrintWriter(outputStream);
                writer.println(response);
                writer.flush();

                System.out.printf("[%s:%d] req:%s,resp:%s",clientSocket.getInetAddress().toString(),clientSocket.getPort(),request,response);
                System.out.println();
            }
        }catch (IOException e){
            e.printStackTrace();
        }finally {
            try {
                clientSocket.close();
            }catch (IOException e){
                e.printStackTrace();
            }
        }
    }

    public static String process(String request){
        return request;
    }

    public static void main(String[] args) throws IOException {
        Server server = new Server(9090);
        server.start();
    }
}

2、客户端

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

public class Client {
    public static Socket socket = null;

    public Client(String ip,int port) throws IOException {
        socket = new Socket(ip,port);
    }

    public static void start() throws IOException {
        System.out.println("客户端启动!");
        Scanner scanner = new Scanner(System.in);
        try (InputStream inputStream = socket.getInputStream();
             OutputStream outputStream = socket.getOutputStream()){
            PrintWriter writer = new PrintWriter(outputStream);
            Scanner scannerRes = new Scanner(inputStream);
            while (true){
                System.out.print("->");
                String request = scanner.next();

                writer.println(request);
                writer.flush();

                String response = scannerRes.next();
                System.out.println(response);
            }
        }catch (IOException e){
            e.printStackTrace();
        }
    }


    public static void main(String[] args) throws IOException {
        Client client = new Client("127.0.0.1",9090);
        client.start();
    }

}

最终结果

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/263210.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

25、新加坡南洋理工、新加坡国立大学提出FBCNet:完美融合FBCSP的CNN,EEG解码SOTA水准![抱歉老师,我太想进步了!]

前言: 阴阳差错,因工作需要,需要查阅有关如何将FBCSP融入CNN中的文献,查阅全网,发现只此一篇文章,心中大喜,心想作者哪家单位,读之,原来是自己大导(新加坡工…

冬天天冷早安问候语关心话,愿我的每句话都能带给你温馨

1、送你一声问候,为你驱走冬日严寒,送你一份关怀,为你增添丝丝温暖,送你一句祝福,为你驱走所有不快,送你一份关爱,为你增添幸福无限,天虽寒了,我的关心犹在,愿…

Centos安装Docker及使用

文章目录 配置要求Centos安装Docker卸载docker(可选)安装docker首先需要大家虚拟机联网,安装yum工具然后更新本地镜像源:然后输入安装docker命令:查看docker的版本 启动docker关闭防火墙接着通过命令启动docker 配置镜…

vscode debug c++代码

需要提前写好CMakeLists.txt 在tasks.json中写好编译的步骤,即tasks,如cmake … 和make -j 在lauch.json中配置可执行文件的路径和需要执行tasks中的哪一个任务 具体步骤: 1.写好c代码和CMakeLists.txt 2.配置tasks.json 终端–>配置任务…

竞赛保研 基于CNN实现谣言检测 - python 深度学习 机器学习

文章目录 1 前言1.1 背景 2 数据集3 实现过程4 CNN网络实现5 模型训练部分6 模型评估7 预测结果8 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于CNN实现谣言检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐&am…

Jmeter测试时遇到的各种乱码问题及解决

在Jmeter中显示乱码 遇到的问题:csv文件中有的用户名是中文的,接口使用该用户名入参时,查看结果树中看到,中文名显示为一堆乱码。 解决的方法: 应该是文件编码与jmeter编码不一致导致的。 1)新建一个tx…

使用Python从图像中提取表格

有什么作用? 与深度学习解决方案相比,这个轻量级的包不需要训练和最小化参数化。它提供了以下功能: 识别图像和PDF文件中的表格,包括在表格单元级别的边界框。 通过支持OCR服务/工具(Tesseract、PaddleOCR、AWS Textract、Google Vision和Azure OCR目前支持)来提取表格内…

Grafana安装zabbix插件

文章目录 一、在线安装zabbix插件二、离线安装1.下载安装2.grafana配置zabbix数据源 一、在线安装zabbix插件 如果grafana服务器可以联网即可在线安装。 安装方法官网上有:官网链接联网安装比较慢。 二、离线安装 1.下载安装 官网下载链接 [rootnode1 src]# mo…

抖店怎么运营?走通流程是关键!

我是电商珠珠 很多新手在入驻抖店的时候,都不知道前期怎么去运营。 运营的技巧很多,牵扯到很多细节,跑通流程是关键。 所以,今天就来给大家讲讲抖店的几个基本流程,只有将流程跑通了才能去更快的抠细节上的东西。 …

算法题系列6·删除有序数组中的重复项

目录 题目描述 思路分析 实现 题目描述 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 …

解决:AD原理图网络无法更新同步到PCB

问题:表面上看起来引脚号都是一一对应的,但是Update过去就是无法同步。 解决: 检查并修改 元件管脚列 与 Name列 是否一一对应: 检查封装管脚模型匹配:

基于ssm高校实验室信息化综合管理平台建设系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本高校实验室信息化综合管理就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的…

【快速解决】python数据可视化时候无法显示中文字符的问题/图表中无法显示中文字符

目录 问题展示 解决方法 运行效果展示 问题展示 解决方法 加入以下代码即可 import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False运行效果展示 成功运行出来 🌌点击下方个人名片,交流会…

K8s攻击案例:Privileged特权容器导致节点沦陷

01、概述 特权容器(Privileged Container)是一种比较特殊的容器,在K8s中运行特权容器,需要将 Privileged 设为 true ,容器可以执行几乎所有可以直接在主机上执行的操作。 基于此,利用容器的特权配置可以获取…

flutter开发实战-第一帧布局完成回调实现

flutter开发实战-第一帧布局完成回调实现 在开发中,我们有时候需要在第一帧布局完成后调用一些相关的方法。这里记录一下是实现过程。 Flutter中有多种不同的Binding,每种Binding都负责不同的功能。下面是Flutter中常见的Binding: 这里简单…

【权威认证】飞凌嵌入式FET113i-S核心板国产化率达100%

经中国赛宝实验室的严格认证,飞凌嵌入式FET113i-S核心板的电子元器件国产化率达100%——这款超高性价比的全国产核心板为新基建领域的国产化替代升级注入了新动力。 关于【中国赛宝实验室】 中国电子产品可靠性与环境试验研究所(工业和信息化部电子第五研…

STM32 AI 模型测试

PC仿真软件测试 我在STM32单片机上跑神经网络算法—CUBE-AI_stm32cube.ai-CSDN博客 仿真软件测试结果和真实情况差距过大 云平台测试 Home - STM32Cube.AI Developer Cloud 上传模型文件 点击Start 选择优化方式 可以跳过量化步骤,到Benchmark 选择合适的型号&a…

配置OSPF多区域,实现内网互通---实验

目录 配置OSPF多区域,实现内网互通---实验 拓扑 需求: 配置步骤: 配置命令: 配置OSPF多区域,实现内网互通---实验 拓扑 需求: 1)实现内网所有vlan和R1互通 2)实现R1和SW5/SW6…

java开发面试:常见业务场景之单点登录SSO(JWT)、权限认证、上传数据的安全性的控制、项目中遇到的问题、日志采集(ELK)、快速定位系统的瓶颈

单点登录(SSO) 单点登录,Single Sign On(简称SSO),只需要登录一次,就可以访问所有信任的应用系统。 如果是单个tomcat服务,session可以共享,如果是多个tomcat,那么服务s…

数字孪生模型:打造未来智能世界的核心力量

随着科技的飞速发展,我们正在逐步迈入一个全新的智能时代。在这个时代中,数字孪生模型成为了推动社会进步和产业变革的重要力量。它不仅改变了我们对世界的认知方式,还为各行各业带来了前所未有的创新与突破。 一、数字孪生模型的定义与原理 …