java中socket获取输入流,如果服务端往客户端发送了好几次数据,这几次的数据都会写进输入流里
java中socket获取输入流,如果服务端往客户端发送了好几次数据,这几次的数据都会写进输入流里吗?怎么获取服务端最后发送的一次数据?...
java中socket获取输入流,如果服务端往客户端发送了好几次数据,这几次的数据都会写进输入流里吗? 怎么获取服务端最后发送的一次数据?
展开
- 你的回答被采纳后将获得:
- 系统奖励15(财富值+成长值)+难题奖励20(财富值+成长值)
1个回答
展开全部
看你就是网络没理解透彻。
按你的描述,你应该是用的tcp协议在传输数据。
给你拆分一下,数据,从物理层路由过后首先会到链路层(网卡),网卡再往上(网卡驱动会解析会解析数据)递交给ip层解析(操作系统实现好),再网上递交给tcp层(此层操作系统实现)。每层都会有自己的缓冲期,大小都有限制,其中在tcp层,大概有数据发送或接收的低水位限制值小于此数据读不出来发不出去,默认设置一般操作系统都是一个字节。从网络上过来的数据,传递顺序未必是有序的。即便tcp层最后把数据排序,tcp缓冲区中排序好的数据,本身就无法界定发送数据边界。tcp缓冲区中的数据再投递到内核缓存区,最后放到应用程序这里是java虚拟机中的缓冲区,java可以读出来一样是没边界的。如果要区分,只能在最后发送那条数据中做个标示多发几个标示字节。
如正常的的结束表示eof(\r\n),必须发送fin分节由操作系统自行产生然后传递给read系统调用。
按你的描述,你应该是用的tcp协议在传输数据。
给你拆分一下,数据,从物理层路由过后首先会到链路层(网卡),网卡再往上(网卡驱动会解析会解析数据)递交给ip层解析(操作系统实现好),再网上递交给tcp层(此层操作系统实现)。每层都会有自己的缓冲期,大小都有限制,其中在tcp层,大概有数据发送或接收的低水位限制值小于此数据读不出来发不出去,默认设置一般操作系统都是一个字节。从网络上过来的数据,传递顺序未必是有序的。即便tcp层最后把数据排序,tcp缓冲区中排序好的数据,本身就无法界定发送数据边界。tcp缓冲区中的数据再投递到内核缓存区,最后放到应用程序这里是java虚拟机中的缓冲区,java可以读出来一样是没边界的。如果要区分,只能在最后发送那条数据中做个标示多发几个标示字节。
如正常的的结束表示eof(\r\n),必须发送fin分节由操作系统自行产生然后传递给read系统调用。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询