首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Sweet Snippet系列 之 TCP数据接收

Sweet Snippet系列 之 TCP数据接收 一.引子   虽说仍然是Sweet Snippet,不过本篇并没有代码,纯粹是自己觉得有点趣味,就索性一记了~ 二. ...问题   接触过网络编程的朋友大概都应知道TCP,作为一种“流”式协议,TCP的粘包问题一直都是程序处理的要点,而这次的问题就是,如果发送n字节的TCP数据,对端接收时会出现多少种接收情况? 三. ...解法   我们先从具体的一个实例来简单算一算吧~就假设我们发送了3个字节的TCP数据: image.png   由于TCP如果接收成功至少可以接收一个字节,所以对于3个字节的数据而言,最多可能造成总计三次...TCP接收,让我们分情况讨论一下:   对于只发生一次TCP接收就获取全部数据的情况,只有1种可能(分隔线代表一次接收): image.png 对于发生两次TCP接收,有2种可能: image.png...  对于发生三次TCP接收,显而易见,只有1种可能: image.png 所以总的接收情况次数为:C(3) = 1 + 2 + 1 = 4 对于n个字节的一般情况,分情况讨论的方法就有些费心费力了

55010

TCP协议发送接收数据简单实现

背景 Demo 基于 Java 实现简单的 TCP 传输 / 接收协议 词义百科 TCP 协议 (传输控制协议) TCP 协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,再传输数据...在 TCP 连接中必须要明确客户端与服务器,由客户端向服务器发送连接请求,每次连接的创建都需要经过 “三次握手” 三次握手:TCP 协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠...客户端和服务器可以开始数据传输,由于这种面向连接的特性。...TCP 协议可以保证传输数据的安全,所以应用十分广泛,比如:文件上传、文件下载、浏览页面 三次握手示意图 四次挥手示意图 发送端 Demo package tcp; import java.io....接收数据步骤 * 1.创建服务端socket对象 * 2.监听客户端连接,返回一个socket对象 * 3.获取输入流,读数据,并把数据显示在控制台 * 4.释放资源 */ public class

1.2K50
您找到你想要的搜索结果了吗?
是的
没有找到

TCP接收窗口的实现(一)

TCP首部中的Window字段,表示当前套接字的接收窗口,即目前可以接收数据大小,对端不会发送超过接收窗口大小的数据。...如果在三次握手时,两端都支持Windows Scale选项,则实际的接收窗口还要乘以Windows Scale的值。 这个主题将分为两部分:本文是第一部分,是TCP的初始接收窗口大小是如何决定的。...第二部分,分析TCP的动态接收窗口。 主动连接 TCP主动发起连接,即发送三次握手中的第一个SYN报文。这时,TCP窗口的大小自然取决于本地的参数。...32 对于TCP协议来说,重要的是要保证MSS是有效的。当用户配置的MSS值大于出口的MSS时,为了保证TCP数据报文的正常通信,则选择较小的值。...而一般来说,大家都很少设置window上限,所以TCP初始接收窗口的大小就决定于套接字的缓存和拥塞窗口(这个由系统决定)。 ---- 居安思危,手不释卷。

2.7K41

MULE 无法接收TCP报文问题分析

但是重新联调时,渠道方反馈一直超时read timed out,联系网络组重新进行抓包确认,服务器是正常接收渠道方请求,但是应用程序这边却需要在十几二十分钟之后才能接收到渠道请求,所以请老师帮忙看下,能否配合检测下从...你认为所有人都绝不可能犯的简单错误 问题梳理¶ 再次回顾一下开发的详细描述, 事实有: 专线接入 TCP协议传输 请求经常性的出现超时 渠道方反馈一直超时read timed out 服务器是正常接收渠道方请求...主机和网络组的反馈: "我从服务器抓包 能正常接收到对方的包, 但是应用不能及时收到" "服务器上面抓包,显示收到报文了, 也回复ack了. 是实时收到的."...拿不到数据2个原因: mule 这个组件比较特殊, 没有对应的插件; 报文直接走的4层TCP协议, pinpoint无法抓到4层TCP. 所以最后还是安装Dynatrace了监控....问题根因详细说明¶ 开发老师的根因详细说明: 问题定位到了,mule的一个getway方法对渠道请求做TCP解析后再把消息转给mule-forN公司 8110端口,现在是接收到渠道416个字符,但是重新

1.4K30

Go:使用TCP发送和接收大文件

在Go中进行TCP编程时,文件的发送和接收是一个常见的问题,特别是处理大文件时。本文将深入探讨如何在Go中使用TCP发送和接收大文件,以及如何有效地处理这类问题。...= nil { log.Fatal(err) } } 在这个示例中,我们创建了一个TCP服务器,该服务器在接受到新的连接后会发送largefile.txt文件的内容。...= nil { log.Fatal(err) } } 在这个示例中,我们创建了一个TCP客户端,该客户端连接到服务器接收文件内容,然后将接收到的内容写入到received.txt...然后,服务器根据这个文件头来接收文件数据。...需要注意的是,如果发送和接收方的机器使用不同的字节序,那么发送方在发送数据时需要将数据转换为网络字节序,接收方在接收数据时需要将数据从网络字节序转换为本地字节序。

78810

Windows TCP: TCP接收窗口自动调谐(Auto-Tuning)原理介绍

在本文我将介绍TCP接收窗口及其对TCP吞吐量的影响、TCP窗口扩展的使用以及Windows Vista和Windows Server 2008中新的接收窗口自动调整功能,这些功能可优化接收数据TCP...因为接收窗口中可能有应用程序尚未检索到的数据和已接收但未确认的数据,所以TCP接收窗口具有额外的结构,如图2所示。 [TCP接收窗口中的数据类型.gif] 请注意最大和当前接收窗口之间的差异。...但是,当TCP连接具有较大的接收窗口大小和较大的BDP (例如,在位于高速WAN链路上的两台服务器之间以100毫秒的往返时间复制数据)时,这些算法不能足够快地增加发送窗口以充分利用连接的带宽。...对于典型的基于客户端的网络流量(例如网页或电子邮件),Web服务器或电子邮件服务器将能够更快地向客户端计算机发送更多TCP数据,从而导致网络性能的总体提高。...但是,基于Windows Vista的客户端计算机的数据传输速度更快,因为接收窗口较大,而且服务器能够将管道从服务器填充到客户端。

3.8K60

高性能网络编程3—-TCP消息的接收

本文将通过三幅图讲述三种典型的接收TCP消息场景,理清内核为实现TCP消息的接收所实现的4个队列容器。...接收TCP消息的过程可以一分为二:首先是PC上的网卡接收到网线传来的报文,通过软中断内核拿到并且解析其为TCP报文,然后TCP模块决定如何处理这个TCP报文。...sysctl_tcp_low_latency && tp->ucopy.task) {           //到这里,通常是用户进程读数据时没读到指定大小的数据,休眠了。...2、用户进程所处的linux操作系统上,将sysctl中的tcp_low_latency设置为1。这意味着,这台服务器希望TCP进程能够更及时的接收TCP消息。...10、此时,由于S2是连接上正要接收的序号,同时,有一个用户进程正在休眠等待接收数据中,且它要等待的数据起始序号正是S2,于是,这种种条件下,使得这一步同时也是网络软中断执行上下文中,把S2-S3报文直接拷贝进用户内存

1.2K51

tcp socket的发送与接收缓冲区

1) 应用程序可通过调用send(write, sendmsg等)利用tcp socket向网络发送应用数据,而tcp/ip协议栈再通过网络设备接口把已经组织成struct sk_buff的应用数据(tcp...数据报)真正发送到网络上,由于应用程序调用send的速度跟网络介质发送数据的速度存在差异,所以,一部分应用数据被组织成tcp数据报之后,会缓存在tcp socket的发送缓存队列中,等待网络空闲时再发送出去...同时,tcp协议要求对端在收到tcp数据报后,要对其序号进行ACK,只有当收到一个tcp 数据报的ACK之后,才可以把这个tcp数据报(以一个struct sk_buff的形式存在)从socket的发送缓冲队列中清除...struct sock的成员sk_rcvbuf表示接收缓冲队列的大小,其初始值取mysysctl_tcp_rmem[1],成员sk_receive_queue 是接收缓冲队列,结构跟sk_write_queue...tcp socket的发送缓冲队列跟接收缓冲队列的大小既可以通过/proc文件系统进行修改,也可以通过TCP选项操作进行修改。

3.3K20

TCP编程tcp服务器客户端服务端tcp服务端发送和接收消息客户端接受和发送消息tcp服务器使用多线程接受多个客户端服务端使用多进程接收多个客户端

TCP和UDP的区别: (TCP)传输控制协议,是一种提供可靠数据传输的通用协议。 (UDP)用户数据报协议,是一个面向无连接的协议。采用该协议不需要两个应用程序先建立连接。...(端口)是可用的,从而进行收发数据,而实际上目标地址(端口)未必可用,所以传输数据不可靠 4、由于TCP需要建立真实的连接,所以需要消耗服务器的负载要大于UDP ?...TCP通信模型 tcp服务器 完成一个tcp服务器的功能,需要的流程如下: socket创建一个套接字 bind绑定ip和port listen使套接字变为可以被动链接 accept等待客户端的链接 recv.../send接收发送数据 客户端 大多数连接都是可靠的TCP连接。...,不会关闭 tcp服务端发送和接收消息 import socket import time ''' serverSocket是用来接收新的客户端的 以后与这个连接的客户端的收发消息就不能用serverSocket

7.2K30

搞了半天,终于弄懂了TCP Socket数据接收和发送,太难~

假设数据包是按顺序的到来的,那么数据有效负载就被复制到套接字的接收缓冲区中。...例如,内核可能会将每个接收和写入队列的大小限制在100KB。然后每个TCP套接字可以使用的最大内核内存量大约为200KB(因为与队列的大小相比,其他TCP数据结构的大小可以忽略不计)。...读语义 如果接收缓冲区为空,并且用户调用read(2),则系统调用将被阻塞,直到数据可用。 如果接收缓冲区是非空的,并且用户调用read(2),系统调用将立即返回这些可用的数据。...如果接收缓冲区已满,而TCP连接的另一端尝试发送更多的数据,内核将拒绝对数据包进行ACK。这只是常规的TCP拥塞控制。 写语义 如果写入队列未满,并且用户调用写入,则系统调用将成功。...客户机将看到它可以建立新的TCP连接,但是当它尝试使用它们时,服务器似乎响应非常慢。所以建议在这种情况下,最好是让新的连接失败,因为这样可以提供更明显的服务器不正常的反馈。

7.4K41

接收服务器数据的长链接方案

在项目中或多或少有一些场景会使用到长链接,除去一些聊天的项目(双向数据交换)外,更多见的如:排行榜定时刷新,大屏数据动态刷新等,往往我们只是从服务器来获取数据进行展示即可,原来除了使用定时器来发送请求获取数据外还能想到的就是...仅支持从服务器发送文本数据到客户端,用的也是常规的HTTP协议,最最关键是简单。 EventSource 是服务器推送的一个网络事件接口。...(摘自MDN) Server-Sent Events 规范描述了一个内建的类 EventSource,它能保持与服务器的连接,并允许从中接收事件。与 WebSocket 类似,其连接是持久的。...window.esc.connection((e) => { console.log('建立连接', e); }, (e) => { console.log('接收数据

1.3K50

2.2接收数据

数据接收服务器的作用 数据接收服务器就跟它的字面意思一样,负责接收从设备发送来的数据。它在设备和系统之间起着桥梁作用。有很多种方法可以从设备把数据发送给服务器,其中具有代表性的包括以下两种方法。...使用一般的 Web 框架就可以制作数据接收服务器。设备用 HTTP 的 GET 方法和 POST 方法访问服务器,把数据存入请求参数和 BODY 并发送(图 2.6)。...这样一来,在发送语音数据等连续的数据,以及发生与服务器的相互交换时,就能使用 WebSocket 了。...中介承担着转发 MQTT 通信的服务器的作用。相对而言,发布者和订阅者则起着客户端的作用。发布者是负责发送消息的客户端,而订阅者是负责接收消息的客户端。...QoS 0 指的是最多发送一次消息( at most once)(图 2.11),发送要遵循 TCP/IP 通信的“尽力服务” A。消息分两种情况,即到达了一次中介处,或没有到达中介处。

2.2K30

高性能网络编程3----TCP消息的接收

本文将通过三幅图讲述三种典型的接收TCP消息场景,理清内核为实现TCP消息的接收所实现的4个队列容器。...接收TCP消息的过程可以一分为二:首先是PC上的网卡接收到网线传来的报文,通过软中断内核拿到并且解析其为TCP报文,然后TCP模块决定如何处理这个TCP报文。...sysctl_tcp_low_latency && tp->ucopy.task) {   //到这里,通常是用户进程读数据时没读到指定大小的数据,休眠了。...2、用户进程所处的linux操作系统上,将sysctl中的tcp_low_latency设置为1。这意味着,这台服务器希望TCP进程能够更及时的接收TCP消息。...10、此时,由于S2是连接上正要接收的序号,同时,有一个用户进程正在休眠等待接收数据中,且它要等待的数据起始序号正是S2,于是,这种种条件下,使得这一步同时也是网络软中断执行上下文中,把S2-S3报文直接拷贝进用户内存

99810
领券