java的socket传输文件
这方面的 我也做过,建议用DataInputStream 做底层,然后用其他高级流,做装饰,这样穿不会丢失,我以前也做了一个如果要源代码,给我留言,不会丢失文件的
『贰』 java服务器端用传输给客户端文件流(fileinputstream),客户端应该如何接收(socket )
其实这个问题你应该先想一下socket到底是一个什么东西,在网络编程中socket到底用来做什么的。socket:在操作系统内核中它代表网络连接的一个端点(endpoint),在应用程序中它代表一个打开的文件。socketpair唯一确定的一条网络连接,socketpair就是客户端socket和服务端socket的一个组合。也就是客户端ip和port与服务端ip和port的组合。一条网络连接也就是一条通信的信道,tcp连接代表的信道是全双工的。以信道来讲,逻辑上就存在两个管道来代表输出与输入来发送和接收信息。
那么在应用程序上我们就可以拿到这2个管道来完成socket之间的通信。
以你的应用来看输出流fos就代表着图中的红色管道,那么在服务端就应该是这个样的。
ScoketconnSock=serverSocket.accept();//connSock代表着服务端的Socket
InputStreamis=connSock.getInputStream();//输入流is代表图中的红色管道
OutputStreaos=connSock.getOutputStream();//输出流os代表图中的绿色管道
在服务端有一个字节缓冲区来存放从is读取的字节数据
byte[]buffer=newbyte[1024];
然后服务端读取数据来填充这个字节缓冲区
is.read(buffer);//比如这样
然后就根据你的需求来操作这个buffer了。
然后把处理过后的数据通过os发送给客户端。os就是图中的那个绿色管道
os.write(处理过后的数据);
『叁』 java socket多文件传输问题
参考思路:
1.先传文件名跟文件大小到 server。
2.开始传文件。
3.告诉server传完了。
4.客户端开始传下一个,重复123。
参考简单代码:
long fileLength;
int readLength;
long totalLength;
for (...)
{
// 读取文件名
// 读取文件长度保存到fileLength中
// 将totalLength置为0
while (1)
{
// 读取数据流,将实际读取的字节数保存在readLength中
totalLength += readLength;
if (totalLength >= fileLength) // 一个文件读取完成,break
// 这样就差不多了,不过这会把下一个文件的信息读到当前文件中来。
// 思路是fileLength - totalLength小于等于你设置的缓冲区长度时读取长度就是fileLength - totalLength
}
}
『肆』 java socket编程如何测量文件传输速度
下面给你介绍3种解决方法:
解决方案一:
发送时发送一个记录客户端时间的包,同时记录好这个包的大小 。服务端在收到这个包后,拆包。取出客户端时间和自己的服务端时间时行差值计算。
然后,接下去就好做了
解决方案二:
在发送数据的时候获取当前系统时间,并将其作为初始时间保存下来(比如long beginTime=毫秒数),传输到客户端;然后再客户端收到文件后计算与当前系统时间的差值即可。
解决方案三:
long start=System.currentTimeMillis();
传输的过程或者方法调用
long end=System.currentTimeMillis();
System.out.println("传输时间"+(end-start)+"毫秒");
『伍』 java socket如何实现一次传送多个文件
很简单,就是把多个文件“变成”一个文件传送就可以了,每个文件都是一个流,把这些流输入到一个流中合并流传输即可,这个是基本思路。实现差不多以下两个方法
1、直接流拼接,循环要传输的文件列表,多个InputStream,然后输出到一个OutputStream,这个out就是发送数据的端口,为了接收端能够识别每个文件从而分割流,需要每个流中结尾添加分隔符。其实这就是HTTP文件上传的做法。
2、就比较简单了,职业使用ZIP工具包吧需要传输的多文件压缩成一个文件传输,接收端直接解压缩就完事。
需要注意的是,发送多文件上传你需要提取计算好总传输量字节大小放在传输报文头部告诉接收端你要发送的数据有多大,不然接收端可能无法完整接收数据。
『陆』 java新手,socket编程,请问如何一次发送多个文件,网上看了一些代码,但各种异常,高手分析一下:
循环发送,肯定是读到全部内容的底啊,它是不会自动加结束符的,应该在发送完一个文件后发送一个结束标志过去,这样既可以处理啦。