202110-12 Netty解决 TCP 粘包拆包的方法 什么是粘包/拆包 一般所谓的TCP粘包是在一次接收数据不能完全地体现一个完整的消息数据。TCP通讯为何存在粘包呢?主要原因是TCP是以流的方式来处理数据,再加上网络上MTU的往往小于在应用处理的消息数据,所以就会引发一次接收的数据无法满足消息的需要,导致粘包的存在。处理粘包的唯一方法就是制定应用层的数据通讯协议,通过协议来规范现有接收的数据是否满足消息数据的需要。我们都知道TC... 继续阅读 >
202110-12 Java网络编程TCP实现文件上传功能 本文实例为大家分享了Java网络编程TCP实现文件上传的具体代码,供大家参考,具体内容如下上一篇博客,用网络编程TCP实现聊天,这次实现文件上传。客户端:packagecom.kuang.lesson02;importjava.io.*;importjava.net.InetAddress;importjava.net.Socket;//客户端publicclassTcpClientDemo2{publicstaticvoidmain(String[]args)throwsException{//1、创建一个Socket连接Socketsocket=newSoc... 继续阅读 >
202110-12 Java网络编程TCP实现聊天功能 网络编程TCP实现聊天的前提还需要掌握IO流,话不多说,直接上代码!客户端:packagecom.kuang.lesson02;importjava.io.IOException;importjava.io.OutputStream;importjava.net.InetAddress;importjava.net.Socket;//客户端publicclassTcpClientDemo01{publicstaticvoidmain(String[]args){Socketsocket=null;OutputStreamos=null;try{//1、要知道服务器的地址、端口... 继续阅读 >
202110-12 基于C++实现TCP聊天室功能 本文实例为大家分享了C++实现TCP聊天室功能的具体代码,供大家参考,具体内容如下TCPServer.cpp://TCPServer.cpp:Definestheentrypointfortheconsoleapplication.#include"stdafx.h"#include<iostream>#include<stdio.h>#include<WinSock2.h>usingnamespacestd;#pragmacomment(lib,"ws2_32.lib")constchar*WELCOMTOCHATROOM="欢迎来到聊天室";constchar*MESSAGECOMED="收到客户端发来的信息:";constchar... 继续阅读 >
202109-14 两张动图--带你搞懂TCP的三次握手与四次挥手 目录TCP的概述TCP报文首部TCP连接的建立(三次握手)什么TCP客户端最后还要发送一次确认呢?TCP连接的释放(四次挥手)为什么客户端最后还要等待2MSL?如果已经建立了连接,但是客户端突然出现故障了怎么办?总结背景描述通过上一篇中网络模型中的IP层的介绍,我们知道网络层,可以实现两个主机之间的通信。但是这并不具体,因为,真正进行通信的实体是在主机中的进程,是一个主机中的一个进程与另外一个主机中的一个进程在交换数... 继续阅读 >
202108-31 浅析NIO系列之TCP 目录一、前言二、TCP特性三、IP网络层为何不保证数据包的可靠性四、TCP协议4.1、TCP包组成4.2、如何保证可靠性五、流量控制5.1、滑动窗口5.2、拥堵控制六、TCP状态七、消失的连接——TIME_WAIT一、前言在springboot2中,默认的web容器是netty,这说明“反应式”容器已经是大势所趋,无论是go语言的协从线程,还是java基于reactor线程模型,都是基于事件编程实现高并发的实例。在介绍NIO之前有必要了解下TCP协议,因为目... 继续阅读 >
202107-22 详解Swoole TCP流数据边界问题解决方案 目录1.数据发送过程2.什么是数据边界2.1代码演示3.EOF解决方案3.1open_eof_check3.2open_eof_split3.3open_eof_check和open_eof_split差异4.固定包头+包体解决方案5.总结6.扩展知识6.1字节序1.数据发送过程首先由客户端将数据发往缓冲区(服务端并不是直接收到的),对于客户端来说,这次的数据即是发送成功了,对于服务端是否真正的收到他是不知道的,然后再由服务端从缓冲区中读取数据。图解:2.什么是数据... 继续阅读 >
202107-17 详解PHP Swoole与TCP三次握手 目录握手常见问题连接拒绝Operationnowinprogress丢包错误ipbacklogSYNFlood握手常见问题1、连接拒绝2、Operationnowinprogress多是因为丢包、错误ip、backlog满了&阻塞&tcp_abort_on_overflow=03、min(maxconn,backlog)ss-lt连接拒绝在TCP三次握手的时候,客户端发送SYN这个包给服务端,服务端不接受这个请求,操作系统直接返回了一个RST的包,来拒绝连接的请求。最常见的情况就是客户端去请求某个服务器,服务端没有... 继续阅读 >
202102-21 c# 网络编程之tcp 一、概述UDP和TCP是网络通讯常用的两个传输协议,C#一般可以通过Socket来实现UDP和TCP通讯,由于.NET框架通过UdpClient、TcpListener、TcpClient这几个类对Socket进行了封装,使其使用更加方便, 本文就通过这几个封装过的类讲解一下相关应用。二、基本应用:连接、发送、接收服务端建立侦听并等待连接:TcpListenertcpListener=newTcpListener(IPAddress.Parse("127.0.0.1"),9000);tcpListener.Start();if(tcpListene... 继续阅读 >
202012-17 golang 实现tcp server端和client端,并计算RTT时间操作 server端代码:packagemainimport("fmt""net""log""os")funcmain(){addr:="0.0.0.0:8787"tcpAddr,err:=net.ResolveTCPAddr("tcp",addr)iferr!=nil{log.Fatalf("net.ResovleTCPAddrfail:%s",addr)//等价于printerr后,再os.Exit(1)}listener,err:=net.ListenTCP("tcp",tcpAddr)iferr!=nil{log.Fatalf("listen%sfail:%s",addr,err)}else{log.Println("rpclistening",addr)}fo... 继续阅读 >
202012-14 Java 基于TCP Socket 实现文件上传 文件上传过程一个单向Socket通信过程。客户端通过文件输入流读取文件,然后从Socket获取输出流写入数据。服务端从Socket中获得输入流,然后写入文件输出流,写入数据完成则上传完成。服务端UploadServer:publicclassUplaodServer{publicstaticvoidmain(String[]args){try(//创建一个ServerSocket监听8080端口的请求//ServerSocket实现了AutoCloseable接口,可以自动释放资源ServerSocketserve... 继续阅读 >
202012-07 TCP第三次握手传数据过程图解 RFC793文档里带有SYN标志的过程包是不可以携带数据的,也就是说三次握手的前两次是不可以携带数据的(逻辑上看,连接还没建立,携带数据好像也有点说不过去)。重点就是第三次握手可不可以携带数据。先说结论:TCP协议建立连接的三次握手过程中的第三次握手允许携带数据。对照着上边的TCP状态变化图的连接建立部分,我们看下RFC793文档的说法。RFC793文档给出的说法如下(省略不重要的部分):重点是这句“Dataorcontrolswhich... 继续阅读 >
202012-07 TCP socket SYN队列和Accept队列区别原理解析 首先我们必须明白,处于“LISTENING”状态的TCPsocket,有两个独立的队列:SYN队列(SYNQueue)Accept队列(AcceptQueue)这两个术语有时也被称为“reqsk_queue”,“ACKbacklog”,“listenbacklog”,甚至“TCPbacklog”,但是这篇文章中我们使用上面两个术语以免造成混淆。SYN队列SYN队列存储了收到SYN包的连接(对应内核代码的结构体:structinet_request_sock)。它的职责是回复SYN+ACK包,并且在没有收到ACK包时... 继续阅读 >
202011-29 TCP性能调优实现原理及过程解析 三次握手阶段客户端SYN包的重试次数sysctl-wnet.ipv4.tcp_syn_retries=6相关介绍第1次重试发生在1秒钟后,接着会以翻倍的方式在第2、4、8、16、32秒共做6次重试,最后一次重试会等待64秒,如果仍然没有返回ACK,才会终止三次握手。所以,总耗时是1+2+4+8+16+32+64=127秒,超过2分钟。服务端半连接池大小sysctl-wnet.ipv4.tcp_max_syn_backlog=16384服务端半连接池满了以后是否开启syncookie机制sysctl-wnet.i... 继续阅读 >
202011-22 Java 基于tcp协议实现文件上传 服务端packagelesson02;importjava.io.*;importjava.net.ServerSocket;importjava.net.Socket;/***服务端接收文件*/publicclassTcpServerDemo2{publicstaticvoidmain(String[]args)throwsIOException{//1、创建服务ServerSocketserverSocket=newServerSocket(9000);//2、监听客户端的连接Socketsocket=serverSocket.accept();//阻塞式监听,会一直等待客户端连接//3、获取输入流... 继续阅读 >
202011-22 Java 网络编程之 TCP 实现简单的聊天系统 客户端1、连接服务器Socket2、发送消息packagelesson02;importjava.io.IOException;importjava.io.OutputStream;importjava.net.InetAddress;importjava.net.Socket;/***客户端*/publicclassTcpClientDemo1{publicstaticvoidmain(String[]args){Socketsocket=null;OutputStreamos=null;try{//1、要知道服务器的地址端口号InetAddressserverIP=InetAddress.getByName("127.0... 继续阅读 >