java中socket获取输入流,如果服务端往客户端发送了好几次数据,这几次的数据都会写进输入流里

2025-03-03 18:53:19
推荐回答(1个)
回答1:

看你就是网络没理解透彻。
按你的描述,你应该是用的tcp协议在传输数据。
给你拆分一下,数据,从物理层路由过后首先会到链路层(网卡),网卡再往上(网卡驱动会解析会解析数据)递交给ip层解析(操作系统实现好),再网上递交给tcp层(此层操作系统实现)。每层都会有自己的缓冲期,大小都有限制,其中在tcp层,大概有数据发送或接收的低水位限制值小于此数据读不出来发不出去,默认设置一般操作系统都是一个字节。从网络上过来的数据,传递顺序未必是有序的。即便tcp层最后把数据排序,tcp缓冲区中排序好的数据,本身就无法界定发送数据边界。tcp缓冲区中的数据再投递到内核缓存区,最后放到应用程序这里是java虚拟机中的缓冲区,java可以读出来一样是没边界的。如果要区分,只能在最后发送那条数据中做个标示多发几个标示字节。
如正常的的结束表示eof(\r\n),必须发送fin分节由操作系统自行产生然后传递给read系统调用。