TCP通信协议及代码细节

简介: TCP通信协议及代码细节


TCP通信协议

TCP通信协议是一种可靠的网络协议

它在通信的两端各建立一个Socket对象

通信之前要保持连接已经建立

通过Socket产生IO流来进行网络通信

代码实现

先运行服务端 再运行客户端

import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
 
public class Server {
    public static void main(String[] args) throws IOException {
        //TCP协议 接收数据
 
        //1.创建对象ServerSocker
        ServerSocket ss=new ServerSocket(10000);
 
        //2.监听客户端的连接
        Socket socket=ss.accept();
 
        //3.从连接通道中获取输入流读取数据
        InputStream is=socket.getInputStream();
        int b;
        while((b=is.read())!=-1) System.out.print((char) b);
 
        //4.释放资源
        //断开与客户端的连接
        socket.close();
        //关闭服务器
        ss.close();
    }
}
import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
 
public class Client {
    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("Dduo".getBytes());
 
        //3.释放资源
        os.close();
        socket.close();
    }
}

但是这种只能接收英文

接受中文会产生乱码

原因是IDE默认编码规则是UTF-8

所以每次转中文只是三分之一个中文

所以我们会接受到乱码

我的得把字节流变成字符流

运用转换流

运用缓冲流 提高效率

简写代码

一个套一个

TCP协议代码细节

accept方法底层会等客户端来连接

客户端底层会用三次握手协议来确保连接建立

读写都是IO流去实现的

这些流不是我们去创建的 而是在连接通道里面的

流可以关闭也可以不关闭

但是断开连接时还有四次挥手协议

利用这个协议断开连接

而且就可以保证连接通道里的数据已经处理完毕了

三次握手与四次挥手

三次握手是一个反复确认的过程

四次挥手是为了确保连接断开且数据处理完毕


目录
相关文章
|
24天前
|
监控 网络协议 网络性能优化
网络通信的核心选择:TCP与UDP协议深度解析
在网络通信领域,TCP(传输控制协议)和UDP(用户数据报协议)是两种基础且截然不同的传输层协议。它们各自的特点和适用场景对于网络工程师和开发者来说至关重要。本文将深入探讨TCP和UDP的核心区别,并分析它们在实际应用中的选择依据。
52 3
|
6月前
|
网络协议 安全 Java
Java网络编程入门涉及TCP/IP协议理解与Socket通信。
【6月更文挑战第21天】Java网络编程入门涉及TCP/IP协议理解与Socket通信。TCP/IP协议包括应用层、传输层、网络层和数据链路层。使用Java的`ServerSocket`和`Socket`类,服务器监听端口,接受客户端连接,而客户端连接指定服务器并交换数据。基础示例展示如何创建服务器和发送消息。进阶可涉及多线程、NIO和安全传输。学习这些基础知识能助你构建网络应用。
53 1
|
6月前
|
缓存 网络协议 安全
你以为你了解TCP协议?这些你可能不知道的细节才是关键!
【6月更文挑战第1天】 这篇文章探讨了TCP协议的深入细节,包括SYN/FIN包为何消耗序列号以确保连接可靠性,半连接队列和SYN Flood攻击的概念及其防御策略。此外,文章还介绍了TCP Fast Open(TFO)技术,它通过减少握手次数提升连接速度和安全性。最后,文章讨论了TCP时间戳的作用,它用于精确计算往返时延和防止序列号回绕问题。通过理解这些概念,读者能更好地掌握TCP协议并应对相关面试。
你以为你了解TCP协议?这些你可能不知道的细节才是关键!
|
6月前
|
网络协议 算法 程序员
网络原理(4)——TCP协议的特性
网络原理(4)——TCP协议的特性
34 1
|
6月前
|
网络协议 前端开发 Java
网络原理(3)——TCP协议的特性
网络原理(3)——TCP协议的特性
51 0
|
7月前
|
网络协议
【网络原理】TCP 协议中比较重要的一些特性(一)
【网络原理】TCP 协议中比较重要的一些特性(一)
63 0
|
7月前
|
缓存 网络协议
【网络原理】TCP 协议中比较重要的一些特性(二)
【网络原理】TCP 协议中比较重要的一些特性(二)
51 0
|
7月前
|
网络协议 程序员 网络性能优化
【网络原理】TCP 协议中比较重要的一些特性(三)
【网络原理】TCP 协议中比较重要的一些特性(三)
50 0
|
网络协议 Java API
网络基础编程:TCP协议
网络基础编程:TCP协议
61 0
|
网络协议 安全
TCP协议中的几个核心特性(上)
TCP协议中的几个核心特性(上)
107 0