网络编程-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、传输速度比较慢,没有大小限制,数据比较安全


相关文章
|
18天前
|
网络协议
Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例
Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议,在Qt也被Qt封装成了自己的库供我们调用,对于需要进行网络交互的项目中无疑是很重要的,希望这篇文章可以帮助到大家。 是关于Qt中TCP和UDP的基本使用和特点:
|
7天前
|
网络协议 算法 程序员
提高网络稳定性的关键:TCP滑动窗口与拥塞控制解析
**TCP可靠传输与拥塞控制概要:** 小米讲解TCP如何确保数据可靠性。TCP通过分割数据、编号段、校验和、流量控制(滑动窗口)和拥塞控制(慢开始、拥塞避免、快重传、快恢复)保证数据安全传输。拥塞控制动态调整窗口大小,防止网络过载,提升效率。当连续收到3个相同ACK时执行快重传,快恢复避免剧烈波动。关注“软件求生”获取更多技术内容。
24 4
提高网络稳定性的关键:TCP滑动窗口与拥塞控制解析
|
5天前
|
网络协议 程序员
TCP报文格式全解析:网络小白变高手的必读指南
**TCP报文格式详解摘要** 探索TCP,传输层的关键协议,提供可靠数据传输。报文含源/目的端口(标识应用),32位序号(跟踪字节顺序),确认序号(确认接收),4位首部长度,6位标志(URG, ACK, PSH, RST, SYN, FIN),窗口大小(流量控制),检验和(数据完整性),紧急指针(优先数据)及可变长选项(如MSS, 时间戳)。了解这些字段,能更好地理解TCP连接的建立、管理和数据交换。
20 3
|
6天前
|
传感器 数据采集 网络协议
什么是网络通信中的 Modbus协议?
网络协议是网络通信中至关重要的一部分,它定义了网络中两个或多个设备之间通信的规则、过程和格式。这些规则确保了计算机网络设备能够使用一种通用语言来传输和接收数据,而不管它们的设计、硬件或基础设施如何。
12 1
|
11天前
|
网络协议 程序员 定位技术
学习网络的第一步:全面解析OSI与TCP/IP模型
**网络基础知识概览:** 探索网络通信的关键模型——OSI七层模型和TCP/IP五层模型。OSI模型(物理、数据链路、网络、传输、会话、表示、应用层)提供理论框架,而TCP/IP模型(物理、数据链路、网络、传输、应用层)更为实际,合并了会话、表示和应用层。两者帮助理解数据在网络中的传输过程,为网络设计和管理提供理论支持。了解这些模型,如同在复杂的网络世界中持有了地图。
19 2
|
18天前
|
网络协议 网络架构
【网络编程入门】TCP与UDP通信实战:从零构建服务器与客户端对话(附简易源码,新手友好!)
在了解他们之前我们首先要知道网络模型,它分为两种,一种是OSI,一种是TCP/IP,当然他们的模型图是不同的,如下
|
8天前
|
网络协议 数据安全/隐私保护 Python
在通讯系统工程中,这通常包括硬件、软件、网络协议、数据传输等多个方面的设计和实现。
在通讯系统工程中,这通常包括硬件、软件、网络协议、数据传输等多个方面的设计和实现。
|
10天前
|
网络协议 安全 Python
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
我们将使用Python的内置库`http.server`来创建一个简单的Web服务器。虽然这个示例相对简单,但我们可以围绕它展开许多讨论,包括HTTP协议、网络编程、异常处理、多线程等。
|
18天前
|
安全 NoSQL Java
网络安全-----Redis12的Java客户端----客户端对比12,Jedis介绍,使用简单安全性不足,lettuce(官方默认)是基于Netty,支持同步,异步和响应式,并且线程是安全的,支持R
网络安全-----Redis12的Java客户端----客户端对比12,Jedis介绍,使用简单安全性不足,lettuce(官方默认)是基于Netty,支持同步,异步和响应式,并且线程是安全的,支持R
|
15天前
|
网络协议 安全 Java
Java中的网络编程:Socket编程详解
Java中的网络编程:Socket编程详解