终究什么是流式输入输出,和非流式有啥区别

到底什么是流式输入输出,和非流式有啥区别?
一直不明白“流”到底是什么意思,不要形象的比喻,我要具体的实现过程!!

tcp是面向流的,而udp是面向报文。这个“流”又是啥?!!
------解决思路----------------------
“面向流”就是源源不断地,分不清开始和结束的字节。每次的收发量不确定
”面向报文“就是每次的收发都有最大的长度限制(即报文长度),接收端每次都会接收到一个报文,也就能分清每次报文的开始和结束。

------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

反正意思是,不管多少udp客户端连进来,他们sendto发送完数据都是立即返回,服务端如果在线(建立socket,绑定端口)就会接收所有客户端的数据;然后服务端用recvfrom一个数据包一个数据包的读,其实在recvfrom之前服务器就已经接收到数据了,对不对?

你说tcp的recv可能只是某个send的一部分,意思是,在一个tcp连接里,我要用多次recv吗,,但是好像一般写代码好像也没有用多次recv啊。


1. 是的
2. 总之是你一次 recv 的数据和你一次 send 的数据没有对应关系,而 UDP 是对应的。要怎么样 recv 得看具体的情况,比如,你在传送一个文件,那么你把每次 recv 的内容依次写入文件就行了,不用管哪一次 recv 了多少字节;但是如果你要传送协议,比如每一个协议包是固定大小的,发送端虽然每次 send 了一个完整的包,接受端的一次 recv 就不一定是一个完整的包了,有可能只有半个,有可能是一个半, 这时你就需要把所有 recv 的内容先放到一个缓冲区,直到缓冲区里面的内容组成了一个完整的包后再从缓冲区里面取出包来处理。


最后一个问题,如果服务器不在线,对于tcp来说,客户端连接肯定就失败;对于udp,由于没有连接,sendto还是会成功返回,那发送的数据去哪了,客户端发送数据完后,过了一天,服务器上线还可以收到数据吗

不可能一天后还能收到数据的。。。
服务器没在的话数据就丢失了,UDP 本来就是不可靠的