java socket缓冲区大小问题

问题描述

我在用Socket接收数据的过程中遇到一个问题在局域网中服务器端传过来的数据特别快,数据量也比较大(音频视频数据),客户端处理不过来,造成了Read函数返回-1。我猜测可能和底层的缓冲区有关系,如果调用setReceiveBufferSize函数增大缓冲区就会好一点,但是时间长了,缓冲区满又会出现相同的问题。请问是什么原因,如何解决呢?

解决方案

解决方案二:
没人吗?
解决方案三:
不太清楚帮顶
解决方案四:
原本我也用socket写了收发文件还用了分包拆包,加包头信息等网络传送的东西。最后我放弃了,虽然基础的功能实现了,不过性能还是和专业的没得比。现在传送东西我都是用现成的sftp之类的了
解决方案五:
能否使用一边读一边flush一下呢
解决方案六:
我倒是觉得跟socketread读取速度关系不大。看看能否从以下角度解决问题:1.干脆使用ftp程序让客户将音频传送上来,你再去读取2.如果不可以使用ftp,你的程序可否在读取的时候不要做任何处理,一边读一遍写硬盘,写完再进行处理分析?
解决方案七:
应该是你写的程序有问题,客户端的InputStream读取的速度和服务端写的速度关系不大,read函数返回-1表示已经在当前帧下已经读完了所有数据

时间: 2024-08-22 14:58:53

java socket缓冲区大小问题的相关文章

Java socket 缓冲区

问题描述 socket发送数据时,速度过大会导致传输中断,如何解决? 解决方案

JAVA Socket超时浅析(转)

  套接字或插座(socket)是一种软件形式的抽象,用于表达两台机器间一个连接的"终端".针对一个特定的连接,每台机器上都有一个"套接字",可以想象它们之间有一条虚拟的"线缆".JAVA有两个基于数据流的套接字类:ServerSocket,服务器用它"侦听"进入的连接:Socket,客户端用它初始一次连接.侦听套接字只能接收新的连接请求,不能接收实际的数据包.   套接字是基于TCP/IP实现的,它是用来提供一个访问TCP的

java socket 的参数选项解读(转)

  java socket中有很多参数可以选择,这篇博客的目的是沉淀出这些参数的语义和用法,供自己以后查阅. 1.java socket参数选项总览       在JDK1.6中有如下参数选项: 1 public final static int TCP_NODELAY = 0x0001; 2 3 public final static int SO_BINDADDR = 0x000F; 4 5 public final static int SO_REUSEADDR = 0x04; 6 7 p

java socket 通信 服务端接收的文件大于客户端发出的文件 是什么鬼

问题描述 java socket 通信 服务端接收的文件大于客户端发出的文件 是什么鬼 //服务端package Socket; import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.DataInputStream;import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;

java socket重要参数讲解

Java Socket的api可能很多人会用,但是Java Socket的参数可能很多人都不知道用来干嘛的,甚至都不知道有这些参数. backlog 用于ServerSocket,配置ServerSocket的最大客户端等待队列.等待队列的意思,先看下面代码 public class Main { public static void main(String[] args) throws Exception { int port = 8999; int backlog = 2; ServerSo

java NIO 缓冲区满了怎么办?

问题描述 java NIO 缓冲区满了怎么办? 客户端一次性向服务器传输大量数据时:如(缓冲区只有50:但是要写入的数据却为几万),虽然数据会被分成大小不一的包,有的小于缓冲区,有的却会大于缓冲区,导致超出缓冲区的数据部分丢失,应该怎么办呢?

Java Socket编程实现简单的问候服务_java

本文实例讲解了Java Socket编程实现简单的问候服务的详细代码,供大家参考,具体内容如下 服务器端: 实现一个最简单的Hello服务,打印输出客户端IP地址到控制台,对任何连接的客户端都会发送一串字符(Hello, Java Socket)然后关闭与客户端连接.等待下一个客户端的连接请求到来. 客户端: 实现一个最简单的Socket连接到Hello服务器端,接受服务器端发送过来的字节数据打印并输出内容到控制台. 关键技巧: 由于JAVA中提供非常多的输入与输出流API,导致很多初学者接触J

局域网-java socket 网络传输文件使网络使用率最大化

问题描述 java socket 网络传输文件使网络使用率最大化 局域网传输文件,如何使网络使用率最大化,主要问题是在客户端接收数据写入磁盘时会影响传输效率,有没有好的办法解决呢? 解决方案 1)文件分片并使用多线程传输,文件传输前要预先在磁盘分配好文件所需空间 2)为了提高传输效率,客户端建立数据的内存缓冲区,针对每一个文件片的传输,客户端要启一个线程负载下载到缓冲区,再启一线程从缓冲区读数据写磁盘. 解决方案二: 多线程,边传输数据边写入文件

java socket编程如何测量文件传输速度?

问题描述 java socket编程如何测量文件传输速度? 作业需要,分别写了一个基于tcp和udp的传输文件的程序,想测试两者同时传输时各自的传输速度 请问有什么方法可以实现? 解决方案 发送时发送一个记录客户端时间的包,同时记录好这个包的大小 .服务端在收到这个包后,拆包.取出客户端时间和自己的服务端时间时行差值计算. 然后,接下去就好做了 解决方案二: 类似问题的,http://bbs.csdn.net/topics/391036058,建议参考一下看看 解决方案三: 在发送数据的时候获取