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

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

TCP/IP参考模型

代码案例

服务端代码

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();
    }
}

运行结果

发现服务端虽然接收到信息了,但是出现中文乱码了

解决中文乱码问题

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

只改造服务端代码

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();
    }
}

运行结果

额外补充

1、TCP协议是面向连接的通信协议(通俗一点来说,就是传输之前,必须确保连接是成功的),正好与UDP协议相反,UDP协议是面向无连接的通信协议

2、传输速度比较慢,没有大小限制,数据比较安全


相关文章
|
5月前
|
监控 负载均衡 安全
WebSocket网络编程深度实践:从协议原理到生产级应用
蒋星熠Jaxonic,技术宇宙中的星际旅人,以代码为舟、算法为帆,探索实时通信的无限可能。本文深入解析WebSocket协议原理、工程实践与架构设计,涵盖握手机制、心跳保活、集群部署、安全防护等核心内容,结合代码示例与架构图,助你构建稳定高效的实时应用,在二进制星河中谱写极客诗篇。
WebSocket网络编程深度实践:从协议原理到生产级应用
|
9月前
|
JSON 中间件 Go
Go 网络编程:HTTP服务与客户端开发
Go 语言的 `net/http` 包功能强大,可快速构建高并发 HTTP 服务。本文从创建简单 HTTP 服务入手,逐步讲解请求与响应对象、URL 参数处理、自定义路由、JSON 接口、静态文件服务、中间件编写及 HTTPS 配置等内容。通过示例代码展示如何使用 `http.HandleFunc`、`http.ServeMux`、`http.Client` 等工具实现常见功能,帮助开发者掌握构建高效 Web 应用的核心技能。
467 61
|
9月前
|
运维 网络协议 Go
Go网络编程:基于TCP的网络服务端与客户端
本文介绍了使用 Go 语言的 `net` 包开发 TCP 网络服务的基础与进阶内容。首先简述了 TCP 协议的基本概念和通信流程,接着详细讲解了服务端与客户端的开发步骤,并提供了简单回显服务的示例代码。同时,文章探讨了服务端并发处理连接的方法,以及粘包/拆包、异常检测、超时控制等进阶技巧。最后通过群聊服务端的实战案例巩固知识点,并总结了 TCP 在高可靠性场景中的优势及 Go 并发模型带来的便利性。
|
Ubuntu 网络协议 Unix
02理解网络IO:实现服务与客户端通信
网络IO指客户端与服务端通过网络进行数据收发的过程,常见于微信、QQ等应用。本文详解如何用C语言实现一个支持多客户端连接的TCP服务端,涉及socket编程、线程处理及通信流程,并分析“一消息一线程”模式的优缺点。
456 0
|
12月前
|
网络协议 物联网
VB6网络通信软件上位机开发,TCP网络通信,读写数据并处理,完整源码下载
本文介绍使用VB6开发网络通信上位机客户端程序,涵盖Winsock控件的引入与使用,包括连接服务端、发送数据(如通过`Winsock1.SendData`方法)及接收数据(利用`Winsock1_DataArrival`事件)。代码实现TCP网络通信,可读写并处理16进制数据,适用于自动化和工业控制领域。提供完整源码下载,适合学习VB6网络程序开发。 下载链接:[完整源码](http://xzios.cn:86/WJGL/DownLoadDetial?Id=20)
436 12
|
监控 Linux PHP
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
487 20
|
网络协议 测试技术 Linux
Golang 实现轻量、快速的基于 Reactor 模式的非阻塞 TCP 网络库
gev 是一个基于 epoll 和 kqueue 实现的高性能事件循环库,适用于 Linux 和 macOS(Windows 暂不支持)。它支持多核多线程、动态扩容的 Ring Buffer 读写缓冲区、异步读写和 SO_REUSEPORT 端口重用。gev 使用少量 goroutine,监听连接并处理读写事件。性能测试显示其在不同配置下表现优异。安装命令:`go get -u github.com/Allenxuxu/gev`。
311 0
|
网络协议
TCP报文格式全解析:网络小白变高手的必读指南
本文深入解析TCP报文格式,涵盖源端口、目的端口、序号、确认序号、首部长度、标志字段、窗口大小、检验和、紧急指针及选项字段。每个字段的作用和意义详尽说明,帮助理解TCP协议如何确保可靠的数据传输,是互联网通信的基石。通过学习这些内容,读者可以更好地掌握TCP的工作原理及其在网络中的应用。
|
监控 关系型数据库 MySQL
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
【01】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-硬件设备实时监控系统运营版发布-本产品基于企业级开源项目Zabbix深度二开-分步骤实现预计10篇合集-自营版
470 0
|
网络协议 安全 Java
Java中的网络编程:Socket编程详解
Java中的网络编程:Socket编程详解