java服务器端用传输给客户端文件流(fileinputstream),客户端应该如何接收?(socket )

FIleINputStreamfis=newFileInputstream(file);out.printf(fis);客户端:b=newbyte[1024];while... FIleINputStream fis = new FileInputstream(file);
out.printf(fis);

客户端:
b= new byte[1024];
while(is.read(b)!=-1)
{
fos.write(b);
}
简单些就是这样,没有写完整代码

服务器端用文件流传输,客户端不限读取方式,应该如何实现
在线等答案,高手来
麻烦懂得人来。
展开
 我来答
zuchunlei521
推荐于2018-04-15 · TA获得超过298个赞
知道小有建树答主
回答量:105
采纳率:100%
帮助的人:87.9万
展开全部

其实这个问题你应该先想一下socket到底是一个什么东西,在网络编程中socket到底用来做什么的。socket:在操作系统内核中它代表网络连接的一个端点(endpoint),在应用程序中它代表一个打开的文件。socket pair唯一确定的一条网络连接,socket pair就是客户端socket和服务端socket的一个组合。也就是客户端ip和port与服务端ip和port的组合。一条网络连接也就是一条通信的信道,tcp连接代表的信道是全双工的。以信道来讲,逻辑上就存在两个管道来代表输出与输入来发送和接收信息。

那么在应用程序上我们就可以拿到这2个管道来完成socket之间的通信。

以你的应用来看输出流fos就代表着图中的红色管道,那么在服务端就应该是这个样的。

Scoket connSock = serverSocket.accept();//connSock代表着服务端的Socket

InputStream is = connSock.getInputStream();//输入流is代表图中的红色管道

OutputStrea os = connSock.getOutputStream();//输出流os代表图中的绿色管道

在服务端有一个字节缓冲区来存放从is读取的字节数据

byte[] buffer = new byte[1024];

然后服务端读取数据来填充这个字节缓冲区

is.read(buffer);//比如这样

然后就根据你的需求来操作这个buffer了。

然后把处理过后的数据通过os发送给客户端。os就是图中的那个绿色管道

os.write(处理过后的数据);

木星上的程序员
2012-06-10 · TA获得超过476个赞
知道小有建树答主
回答量:602
采纳率:0%
帮助的人:411万
展开全部
楼上正解
追问
楼上正解?看清我的问题没有哦,我是要传输文件刘,如果是一个buffer或者一个字节的传我还用问么,如果没有答案直接给个不能实现就可以了,崩溃。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友adebc82
2018-04-20
知道答主
回答量:1
采纳率:0%
帮助的人:880
展开全部
  • package cn.hncu.tcp.upload;  

  • import java.io.File;  

  • import java.io.FileInputStream;  

  • import java.io.FileOutputStream;  

  • import java.io.IOException;  

  • import java.io.OutputStream;  

  • import java.net.Socket;  

  • import java.net.UnknownHostException;  

  • public class UploadPicClient {  

  • public static void main(String[] args) {  

  • if(args.length!=1){  

  • System.out.println("请指定文件");  

  • return;  

  • }  

  • File file=new File(args[0]);  

  • if(!(file.exists() && file.isFile())){  

  • System.out.println("上传的文件不存在");  

  • }  

  • if(!(file.getName().endsWith(".jpg")|| file.getName().endsWith(".gif"))){  

  • System.out.println("文件格式有误");  

  • return;  

  • }  

  • if(file.length()>=1024*1024*2){  

  • System.out.println("文件过大");  

  • return;  

  • }  

  • //上传  

  • try {  

  • Socket s=new Socket("127.0.0.1",10008);  

  • FileInputStream fin=new FileInputStream(file);  

  • OutputStream out=s.getOutputStream();  

  • byte[] buf=new byte[1024];  

  • while((fin.read(buf))!=-1){  

  • out.write(buf, 0, buf.length);  

  • }  

  • s.shutdownOutput();//解决阻塞问题  

  • byte[] b=new byte[1024];  

  • s.getInputStream().read(b);  

  • System.out.println(new String(b));  

  • s.close();  

  • } catch (UnknownHostException e) {  

  • e.printStackTrace();  

  • } catch (IOException e) {  

  • e.printStackTrace();  

  • }         

  • }  

  • }  


  • //服务器端

  • [java] view plain copy

  • package cn.hncu.tcp.upload;  

  • import java.io.File;  

  • import java.io.FileOutputStream;  

  • import java.io.IOException;  

  • import java.io.InputStream;  

  • import java.io.OutputStream;  

  • import java.net.ServerSocket;  

  • import java.net.Socket;  

  • public class UploadPicServer {  

  • public static void main(String[] args) {  

  • try {  

  • ServerSocket server=new ServerSocket(10008);  

  • while(true){//多线程实现多用户并发访问  

  • Socket s=server.accept();  

  • new Thread(new UploadThread(s)).start();  

  • }  

  • } catch (IOException e) {  

  • e.printStackTrace();  

  • }  

  • }  

  • }  

  • class UploadThread implements Runnable{  

  • private Socket s;  

  • public UploadThread(Socket s) {  

  • this.s=s;  

  • }  

  • @Override  

  • public void run() {  

  • try {  

  • String ip=s.getInetAddress().getHostAddress();  

  • System.out.println(ip+"connected....");  

  • InputStream in=s.getInputStream();  

  • File dir=new File("f:\\mypic");  

  • if(!dir.exists()){  

  • dir.mkdir();  

  • }  

  • //下面这段主要是把同一个Ip地址的客户端发来的照片用127.0.0.1.jpg格式和127.0.0.1(1)区分开来。  

  • int count=0;  

  • File file=new File(dir,ip+".jpg");  

  • while(file.exists()){//第二次如果存在,则在后面加(1)(2)等。  

  • file=new File(dir,ip+"("+(count++)+")"+".jpg");  

  • }  

  • //从客户端读取  

  • FileOutputStream fout=new FileOutputStream(file);  

  • byte[] buf=new byte[1024];  

  • int len=in.read(buf);  

  • while((len=in.read(buf))!=-1){  

  • fout.write(buf, 0, len);  

  • }  

  • //给客户端上传成功的提示  

  • OutputStream out=s.getOutputStream();  

  • out.write("上传成功".getBytes());  

  • fout.close();  

  • s.close();  

  • } catch (IOException e) {  

  • e.printStackTrace();  

  • }  

  • }  

  • }  

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式