socket read 能一次读满吗

如题所述

因为inputStream.read(byte)是尽可能的读byte[]大小的数据,当你的服务端发送数据速度大于客户端读取数据的速度时,就会出现客户端读到多帧连在一起的报文。而这些发送数据,读取数据的速度是未知的。所以我们需要人为的来做一些调整。比如说每一帧作为一行写入Socket,客户端每次从socket读取一行。这样客户端每次都是读取一帧。
以上情况可以这样实现:在服务端使用PrintWriter
1
2
PrintWriter writer=new PrintWriter(socket.getOutputStream());
writer.println(data);
客户端可以使用BufferedReader
温馨提示:内容为网友见解,仅供参考
无其他回答

socket read 能一次读满吗
因为inputStream.read(byte)是尽可能的读byte[]大小的数据,当你的服务端发送数据速度大于客户端读取数据的速度时,就会出现客户端读到多帧连在一起的报文。而这些发送数据,读取数据的速度是未知的。所以我们需要人为的来做一些调整。比如说每一帧作为一行写入Socket,客户端每次从socket读取一行。这样客户...

php中的 fopen速度为什么会非穆
fopen本来就是socket啊 你读取的时候不要一次性全部读完啊 while($content = read($fd, 1024)) { \/\/一次读1024字节 echo $content;} echo就是一边执行一边输出的啊,是不是你开启了缓存?不过话又说回来,一边执行一边输出本来也是效率最低的。

java为什么在网络传输中socket.read()返回1代表读取完,以前都是返回...
socket.read()的结果是读取的byte长度,1的话表示读了一个byte,不是结束。-1才表示结束

socket read问题
你读到的数据会存入到数组中,这个是判断数组最后一位是否有值 也就是说是否还有数据没读完 是否需要继续往下读 他这么判断是说 如果是0就表示读完了 !=0的话就先赋值给result 然后继续读 继续赋值 但存在这种可能 也许这位数据刚好是0 那这么判断就不行了 ...

socket阻塞和非阻塞的区别
1、读操作 对于阻塞的socket,当socket的接收缓冲区中没有数据时,read调用会一直阻塞住,直到有数据到来才返回。当socket缓冲区中的数据量小于期望读取的数据量时,返回实际读取的字节数。当sockt的接收缓冲区中的数据大于期望读取的字节数时,读取期望读取的字节数,返回实际读取的长度。对于非阻塞socket...

为什么我的socket的read方法没有阻塞,直接
一、你调用read的时候,实际上调用的是socketchannel的read方法,而你设置的阻塞模式是ServerSocketChannel的模式,所以调用read时依然会采用默认的阻塞方式,如果你希望用非阻塞的方式,只要设置一下socketchannel的阻塞模式就OK了。二、默认情况下,read的方法是阻塞模式的,所以没有办法设置他的超时时间,如果...

深刻理解socket编程中的read&&write
或网络不可达(ENETUNREACH)。若在接收端恢复与发送端的连接时,重传的数据被接收,但由于接收端无法识别而返回 RST 包,此时 a 进程上的 read 调用会返回错误 ECONNRESET。这表明 socket 对这些错误有一定程度的反馈能力,前提是应用层在接收端不可达时执行了写入操作,否则可能永远无法获知连接错误。

linux c 读取socket问题
这个,我说下,你那个read的函数那个地方有问题,你可以用一个while循环 来接收数据 ,while(read(sockfd,buf,1900) != 0){ printf("%s",buf);} 但是这样的话没法保存,你看看再弄个buf来保存一下 数据在网络中舆不是一次就传完 ,多次接收才能正常p ...

C中的read在什么情况下读到空文件会等待,什么时候读到空文件会直接返回...
如果是文件中的read(),那么,只要执行了这个函数,就会立即返回,不会等待的,不管文件是否为空,它都不会等待!如果是 socket 中的read(),那么,它会一直阻塞在那里,等待数据的接收,直到有数据来,或者超时才会返回!

怎么建立Socket长连接
所以,退出动作必须有客户端程序自己完成,我们可以在服务端没发送完一段消息并且刷新前就进行一个写入结束符号的标志,客户端解析到结束符号时,变可直接退出read的循环读取操作,避免一直阻塞。2、可以调用有读取一定字节到某个数组的read方法,当然,这只是针对消息定长的情况。长连接与短连接的概念:前者...

相似回答