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.5万
展开全部

其实这个问题你应该先想一下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%
帮助的人:410万
展开全部
楼上正解
追问
楼上正解?看清我的问题没有哦,我是要传输文件刘,如果是一个buffer或者一个字节的传我还用问么,如果没有答案直接给个不能实现就可以了,崩溃。
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友adebc82
2018-04-20
知道答主
回答量:1
采纳率:0%
帮助的人:876
展开全部
  • 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

提交
取消

辅 助

模 式