网络编程-TCP协议(客户端和服务端)

news/2024/5/18 0:43:48 标签: 网络, tcp/ip, 网络协议, UDP, TCP协议, http, 网络编程
http://www.w3.org/2000/svg" style="display: none;">

需要了解UDP协议的,可以看往期文章
https://flypeppa.blog.csdn.net/article/details/133273416

TCP/IP参考模型

https://img-blog.csdnimg.cn/04b4df52f2ce499fbf100b23fbb392f8.png" alt="在这里插入图片描述" />

代码案例

服务端代码

package com.hidata.devops.paas.udp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @Description :
 * @Date: 2023-09-25 15:21
 */
public class TCPserver {
    public static void main(String[] args) throws IOException {

        //TCP协议,服务端,接收数据
        //1、创建服务端ServerSocket对象
        ServerSocket serverSocket = new ServerSocket(10000);

        //2、监听客户端的连接
        Socket socket = serverSocket.accept();

        //3、从连接通道中获取输入流读取数据
        InputStream inputStream = socket.getInputStream();
        int b;
        while ((b = br.read()) != -1){
            System.out.print((char)b);
        }

        //4、释放资源
        socket.close();
        serverSocket.close();
    }
}

客户端代码

package com.hidata.devops.paas.udp;

import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;

/**
 * @Description :
 * @Date: 2023-09-25 15:21
 */
public class TCPclient {
    public static void main(String[] args) throws IOException {

        //TCP协议,客户端,发送数据
        //1、创建socket对象,
        //细节:在创建对象的同时,会连接服务器,如果连接不上,代码会报错
        Socket socket = new Socket("127.0.0.1",10000);

        //2、从连接通道中获取输出流对象
        OutputStream os = socket.getOutputStream();
        os.write("你好".getBytes());

        //3、释放资源
        os.close();
        socket.close();

    }
}

运行结果
https://img-blog.csdnimg.cn/f31476d92fab46d2a2491306a302a80e.png" alt="在这里插入图片描述" />
发现服务端虽然接收到信息了,但是出现中文乱码了

解决中文乱码问题

思路:将字节流转为字符流,来解决中文乱码问题

只改造服务端代码

package com.hidata.devops.paas.udp;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * @Description :
 * @Date: 2023-09-25 15:21
 */
public class TCPserver {
    public static void main(String[] args) throws IOException {

        //TCP协议,服务端,接收数据
        //1、创建服务端ServerSocket对象
        ServerSocket serverSocket = new ServerSocket(10000);

        //2、监听客户端的连接
        Socket socket = serverSocket.accept();

        //3、从连接通道中获取输入流读取数据
        InputStream inputStream = socket.getInputStream();
        //字节流转为字符流,解决中文乱码问题
        InputStreamReader isr = new InputStreamReader(inputStream);
        BufferedReader br = new BufferedReader(isr);
        int b;
        while ((b = br.read()) != -1){
            System.out.print((char)b);
        }

        //4、释放资源
        socket.close();
        serverSocket.close();
    }
}

运行结果
https://img-blog.csdnimg.cn/ff67d32225964ece8f8fd2a97b22310a.png" alt="在这里插入图片描述" />

额外补充

1、TCP协议是面向连接的通信协议(通俗一点来说,就是传输之前,必须确保连接是成功的),正好与UDP协议相反,UDP协议是面向无连接的通信协议
2、传输速度比较慢,没有大小限制,数据比较安全


http://www.niftyadmin.cn/n/5050892.html

相关文章

SQL中LIKE和REGEXP简单对比

一、在SQL中,LIKE和REGEXP是用于模式匹配的两种不同语法。它们用于在数据库查询中匹配符合特定模式的字符串。 1.LIKE 是SQL中用于模糊匹配的运算符,它使用通配符 % 来表示任意个数字符序列(包括空字符序列)的位置。 例如&#xf…

【2023年11月第四版教材】第15章《风险管理》(第三部分)

第15章《风险管理》(第三部分) 5 过程1-规划风险管理6 过程2-识别风险6.1 识别风险★★★6.2 数据收集★★★6.3 数据分析★★★ 7 过程3-实施定性风险分析7.1 实施定性风险分析7.2 数据分析★★★7.3 数据表现★★★7.4 项目文件(更新&#…

vue中使用富文本编辑器,@tinymce/tinymce-vue

富文本就是在后台管理系统中常见的录入带格式的内容,如:表格,字体加粗,斜体,文字颜色等等,就像一个word一样。类似于这样的效果: 我们使用通用在线编辑器tinymce。支持vue和react。 1. 安装 np…

大型DOM结构是如何影响交互性的

没有办法绕过这一点:当你构建一个网页时,该页面一定会有一个文档对象模型(DOM)。DOM代表了你页面HTML的结构,并为JavaScript和CSS提供了访问页面结构和内容的途径。 然而,问题在于DOM的大小会影响浏览器快速…

个人博客系统测试报告(一)

作者:爱塔居 专栏:测试 目录 一、项目背景介绍 二、项目功能 三、测试计划 3.1自动化测试用例 3.2 性能测试 ​​​​​​​(未完) 一、项目背景介绍 个人博客系统前端由注册页、登录页、列表页、详情页、编辑页、个人博客列…

SpringMVC 学习(五)转发,重定向和传参

6. 转发和重定向 Spring MVC 的底层是 servlet,因此在 Spring MVC 中也存在转发和重定向的概念。 对于转发而言,其目的页面可以在 WEB-INF 目录下。重定向的目的页面不允许在 WEB-INF 目录下,因为重定向相当于用户再次发起一次请求&#xf…

【洛谷算法题】P5707-上学迟到【入门1顺序结构】

👨‍💻博客主页:花无缺 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5707-上学迟到【入门1顺序结构】🌏题目描述🌏输入格式&a…

常用 Shell 脚本

1、检测两台服务器指定目录下的文件一致性 #!/bin/bash ##################################### #检测两台服务器指定目录下的文件一致性 ##################################### #通过对比两台服务器上文件的md5值,达到检测一致性的目的 dir/data/web b_ip192.168…