记录socket的使用 | TCP/IP协议下服务器与客户端之间传送数据 | java学习笔记

news2025/1/15 20:57:54

谨以此篇,记录TCP编程,方便日后查阅笔记

注意:用BufferedWriter write完后,一定要flush;否则字符不会进入流中。去看源码可知:真正将字符写入的不是write(),而是flush()。

服务器端代码:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class theServer {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = new ServerSocket(9999); // 该行代码作用:让服务器监听9999端口
        Socket socket = serverSocket.accept();

        InputStream inputStream = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
//        byte[] bytes = new byte[1024];
//        int readLine = 0;
//        while ((readLine = inputStream.read(bytes)) != -1) {
//            System.out.print(new String(bytes, 0, readLine));
//        }
//        socket.shutdownInput();
        String readStr = reader.readLine();
        System.out.println(readStr);

        OutputStream outputStream = socket.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));
//        outputStream.write("server: hi client".getBytes());
//        socket.shutdownOutput(); // 结束标记,让对方(客户端)socket可以使用outputStream流
        writer.write("server: hi client");
        writer.newLine(); // 使用字符流的话,可以用“socket.shutdownInput()”作为结束标记,也可以用“writer.newLine()”作为结束标记;使用newLine作为结束标记,对应的,在读的时候需要使用readLine来读数据
        writer.flush(); // 用BufferedWriter write完后,一定要flush

        writer.close(); // 后打开的流,先关闭
        reader.close();
        socket.close();
        serverSocket.close(); // 先打开的流,后关闭
    }
}

客户端代码:

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;

public class theClient {
    public static void main(String[] args) throws IOException {
        Socket socket =  new Socket(InetAddress.getLocalHost(),9999); // 该行代码作用:让客户端连接到服务器的9999端口

        OutputStream outputStream = socket.getOutputStream();
        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));
//        outputStream.write("client: hi server".getBytes());
        writer.write("client: hi server");
//        socket.shutdownOutput(); // // 结束标记,让对方(服务器端)socket可以使用outputStream流
        writer.newLine(); // 使用字符流的话,可以用“writer.newLine()”作为结束标记
        writer.flush(); // 用BufferedWriter write完后,一定要flush

        InputStream inputStream = socket.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
//        byte[] bytes = new byte[1024];
//        int readLine = 0;
//        while ((readLine = inputStream.read(bytes)) != -1) {
//            System.out.print(new String(bytes, 0, readLine));
//        }
//        socket.shutdownInput();
        String readStr = reader.readLine();
        System.out.println(readStr);

        reader.close();
        writer.close();
        socket.close();
    }
}

运行后结果:

服务器端:
在这里插入图片描述
客户端:
在这里插入图片描述
参考资料:
https://www.bilibili.com/video/BV1fh411y7R8?p=669&vd_source=07ed824bba84f399accbac1be9f9f505

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

运维学习之部署Alertmanager-0.24.0

参考《监控系统部署prometheus基本功能》先完成prometheus部署。 参考《运维学习之采集器 node_exporter 1.3.1安装并使用》安装node_exporter。 下载 nohup wget https://github.com/prometheus/alertmanager/releases/download/v0.24.0/alertmanager-0.24.0.linux-amd64.ta…

SecureCRT ssh链接服务器

SecureCRT通过密钥进行SSH登录 说明: 一般的密码方式登录容易被密码暴力破解。所以一般我们会将 SSH 的端口设置为默认22以外的端口,或者禁用root账户登录。其实可以通过密钥登录这种方式来更好地保证安全。 密钥形式登录的原理是:利用密钥…

day34 集合总结

集合总结 一、概述 作用:存储对象的容器,代替数组的,使用更加的便捷 所处的位置:java.util 体系结构 二、Collection 内部的每一个元素都得是引用数据类型 常用方法 add(Object o) 添加元素 addAll(Collection c) 将指定集…

【LeetCode周赛】LeetCode第362场周赛

LeetCode第362场周赛 与车相交的点判断能否在给定时间到达单元格将石头分散到网格图的最少移动次数 与车相交的点 给你一个下标从 0 开始的二维整数数组 nums 表示汽车停放在数轴上的坐标。对于任意下标 i,nums[i] [starti, endi] ,其中 starti 是第 i…

讯飞星火认知大模型,多种应用一键体验整合

分享几个可以,直接可以使用的AI应用,依托于讯飞星火大模型实现的; 现在讯飞星火认知大模型,使用已经完全开放,可以直接使用; AI抖音商品种草文案 功能: 通过将商品信息输入到讯飞星火AI大模…

IntelliJ IDEA工具常用插件汇总

😜作 者:是江迪呀✒️本文关键词:IntelliJ IDEA 、常用插件☀️每日 一言:人的一生其实都在偏见和走出偏见中度过 文章目录 一、前言二、Plugins1.Key Promoter X2.CodeGlance3.Git Integration:4.Markdow…

SpringBoot整合Mybatis-Plus(含自动配置分析)

目录 1. Mybatis-Plus介绍2. 创建Mysql表和添加测试数据3. 添加pom.xml依赖4. 自动配置分析5. 代码实现5.1 User类实现5.2 指定MapperScan扫描路径5.3 Mapper接口实现5.4 Service实现5.5 UserMapper测试 1. Mybatis-Plus介绍 Mybatis-Plus是一个Mybatis的增强工具,…

Rich Bowen: 无论你在创造什么,最终交付的是信任。

早在开源被我们称之为开源,Rich Bowen 就已经参与其中。作为 Apache 软件基金会的成员,Rich 目前担任董事会成员、会议副总裁。此外,他还是亚马逊云科技的开源策略师。这些多重角色赋予了他对开源的更广泛和深刻的理解。 在他于 2023 年 Com…

远程连接mysql报错“Host xxx is not allowed to connect to this MySQL server“解决办法

在一台服务器上安装了mysql后使用dbeaver远程连接不上报错: 可以看到,报错原因是不许远程连接到mysql服务器 所以,修改访问权限。 首先,进入mysql命令行,查看访问权限: use mysql; select user,host from…

【ProxySql】Mysql如何实现读写分离?看这一篇就够了

🌲其他工具对比 其实市面上有很多关于读写分离的优秀的工具,例如 工具优势劣势ProxySQL- 高性能的负载均衡和连接池管理- 支持MySQL和MariaDB- 灵活的配置和规则定义- 只支持MySQL和MariaDB数据库- 功能相对专注,适用性可能有限- 学习和配置…

K线学习001-早晨之星1

K线定义 早晨之星,顾名思义:就是在太阳尚未升起的时候,黎明前最黑暗的时刻,一颗明亮的启明星在天边指引着那些走向光明的夜行人,前途当然看好。 早晨之星,即预示着跌势将尽,大盘处于拉升的前夜&…

DGIOT 智慧车间机床设备数据采集

**[小 迪 导读]**:DGiot掌上工厂是一款基于微信小程序的应用,本次主要介绍机床设备数据采集功能,旨在帮助施工员高效地收集车间中每台机床的信息、水平座标轴数据和照片。该小程序提供了简单易用的界面和功能,使施工员能够方便地记…

NameError: name ‘add start docstrings to callable‘ is not defined解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

中国又一款3纳米芯片将量产,高通被前后夹击,难怪要降价求售了

高通作为手机芯片市场的领先者,曾长达十多年位居手机芯片市场的王者地位,不过从2020年以来就已被中国芯片企业超越,至今未能挽回,而近期中国一家手机企业的9000S芯片推出更给予高通重击,可能导致高通在中国手机芯片市场…

管理类联考——数学——汇总篇——知识点突破——应用题——路程

⛲️ 路程问题是根据速度、时间、路程之间的关系,研究物体相向、相背和同向运动的问题,解决路程问题常用方法: (1)分解。将综合性的题目先分解成若干个基本题,再按其所属类型,直接利用基本数量…

【C++】list的模拟实现【完整理解版】

目录 一、list的概念引入 1、vector与list的对比 2、关于struct和class的使用 3、list的迭代器失效问题 二、list的模拟实现 1、list三个基本函数类 2、list的结点类的实现 3、list的迭代器类的实现 3.1 基本框架 3.2构造函数 3.3 operator* 3.4 operator-> 3…

四叶图-openGL 例子,第四章。计算机图形学 中例子 代码有点瑕疵

第四版 计算机图形学 中例子 代码有点瑕疵&#xff0c;见下图&#xff0c;本道长保证这个程序没有运行过。 可运行代码如下。 #include "stdafx.h" #include <GL/glut.h> #include <stdlib.h> #include <math.h> #include <iostream> using…

UG\NX二次开发 计算uv参数的最小值最大值 UF_MODL_ask_face_uv_minmax

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 简介: UG\NX二次开发 计算uv参数的最小值最大值 UF_MODL_ask_face_uv_minmax 效果: 代码: #include "me.hpp"void ufusr(char* param, int* ret…

探索如何将html和svg导出为图片

笔者开源了一个Web思维导图&#xff0c;在做导出为图片的功能时走了挺多弯路&#xff0c;所以通过本文来记录一下。 思维导图的节点和连线都是通过 svg 渲染的&#xff0c;作为一个纯 js 库&#xff0c;我们不考虑通过后端来实现&#xff0c;所以只能思考如何通过纯前端的方式…

d3dx9_43.dll丢失如何修复?四种快速修复d3dx9_43.dll丢失的方法分享

在我们日常使用电脑的过程中&#xff0c;有时候会遇到一些问题&#xff0c;其中比较常见的一种就是电脑提示 d3dx9_43.dll 丢失。对于这种情况&#xff0c;我们该如何解决呢&#xff1f;本文将详细介绍 d3dx9_43.dll 文件的相关信息&#xff0c;以及解决 d3dx9_43.dll 丢失的四…