黑马程序员技术交流社区

标题: 网络编程图片上传 [打印本页]

作者: 嘿╰_╯往哪里跑    时间: 2014-2-10 10:31
标题: 网络编程图片上传


  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. }
复制代码
图片上传后,图片打不开,不知道什么原因,各位大神,怎么弄哇???

作者: 糖伯貓    时间: 2014-2-10 11:13
问题在这里:
while((lenIn=in.read())!=-1)
{
           fos.write(bufIn,0,lenIn);
  }

in.read(bufIn);没有把数组传进去
改了后可用
作者: zhkqy    时间: 2014-2-10 11:15
  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.                                 }
复制代码

作者: 嘿╰_╯往哪里跑    时间: 2014-2-10 11:32
仔细一看,真的是,谢谢啦哈
作者: itpower    时间: 2014-2-10 12:18
  1.     byte[] bufIn = new byte[1024];
  2.                                 int lenIn = 0;
  3.                                 while((lenIn=in.read())!=-1)
  4.                                 {
  5.                                         fos.write(bufIn,0,lenIn);
  6.                                 }
复制代码

数据木有放进数组里..
作者: guhaibin    时间: 2014-2-10 12:26
in.read()中数组bufIn没有传进去。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2