A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 嘿╰_╯往哪里跑 中级黑马   /  2014-2-10 10:31  /  1315 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文



  1. import java.io.FileInputStream;
  2. import java.io.FileOutputStream;
  3. import java.io.IOException;
  4. import java.io.InputStream;
  5. import java.io.OutputStream;
  6. import java.net.ServerSocket;
  7. import java.net.Socket;

  8. /**
  9. * 客服端:上传图片
  10. * 思路:
  11. * 1、建立服务,指定连接端口。
  12. * 2、读取本地图片数据
  13. * 3、使用网络流的输出流把图片数据输出
  14. 4、传输结束:socket的shutdownOutput()
  15. * 4、接收服务端的反馈信息(通过输入流)
  16. * 5、关闭资源
  17. *
  18. */
  19. class PicClient {

  20.         public static void main(String[] args) throws Exception{
  21.                  Socket s=new Socket("192.168.1.21",10005);
  22.                  FileInputStream  fis=new FileInputStream("f:\\20130221160.jpg");
  23.                  OutputStream  out=s.getOutputStream();
  24.        
  25.          int len=0;
  26.          byte[]  buf=new byte[1024];
  27.          while((len=fis.read(buf))!=-1){
  28.                  out.write(buf,0,len);
  29.          }
  30.                     s.shutdownOutput();//告诉服务端数据已写完
  31.                   InputStream in=s.getInputStream();
  32.          //接收服务端的返回信息
  33.          byte[] bin=new byte[1024];
  34.          int lenin=in.read(bin);
  35.          System.out.println(new String(bin,0,lenin));
  36.          fis.close();
  37.          s.close();
  38.         }

  39. }
  40. class PicSever {

  41.         public static void main(String[] args) throws Exception {
  42.                
  43.         ServerSocket  ss=new ServerSocket(10005);
  44.         Socket  s=ss.accept();
  45.                         String ip=s.getInetAddress().getHostAddress();
  46.                 System.out.println(ip+"----connection成功");
  47.         //定义图片文件目的
  48.         FileOutputStream  fos=new FileOutputStream("server2.jpg");
  49.         //利用socket读取流,读取客服端的图片数据
  50.          InputStream in = s.getInputStream();
  51.                                 byte[] bufIn = new byte[1024];
  52.                                 int lenIn = 0;
  53.                                 while((lenIn=in.read())!=-1)
  54.                                 {
  55.                                         fos.write(bufIn,0,lenIn);
  56.                                 }

  57.         OutputStream  out=s.getOutputStream();
  58.         out.write("图片上传成功".getBytes());
  59.         s.close();
  60.         ss.close();
  61.         
  62.         }

  63. }
复制代码
图片上传后,图片打不开,不知道什么原因,各位大神,怎么弄哇???

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 淡定

查看全部评分

5 个回复

倒序浏览
问题在这里:
while((lenIn=in.read())!=-1)
{
           fos.write(bufIn,0,lenIn);
  }

in.read(bufIn);没有把数组传进去
改了后可用

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
  1.                                 while((lenIn=in.read())!=-1)

  2.                                 {

  3.                                         fos.write(bufIn,0,lenIn);

  4.                                 }
复制代码


哥们的服务端   while((lenIn=in.read())!=-1)     fos.write(bufIn,0,lenIn);
错误是:
没有读取数据到数组中
fos.write(bufIn,0,lenIn);这句当然也就拿不到数据

  1.                                 while((lenIn=in.read(bufIn))!=-1)

  2.                                 {

  3.                                         fos.write(bufIn,0,lenIn);

  4.                                 }
复制代码

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1 赞一个!

查看全部评分

回复 使用道具 举报
仔细一看,真的是,谢谢啦哈
回复 使用道具 举报
  1.     byte[] bufIn = new byte[1024];
  2.                                 int lenIn = 0;
  3.                                 while((lenIn=in.read())!=-1)
  4.                                 {
  5.                                         fos.write(bufIn,0,lenIn);
  6.                                 }
复制代码

数据木有放进数组里..
回复 使用道具 举报
in.read()中数组bufIn没有传进去。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马