黑马程序员技术交流社区

标题: TCP客户端上传图片至服务端 报了角标越界异常? [打印本页]

作者: leo_lzj    时间: 2014-5-21 09:35
标题: TCP客户端上传图片至服务端 报了角标越界异常?
本帖最后由 leo_lzj 于 2014-5-24 19:34 编辑

我在观看毕老师的视屏教程的时候,照着他的程序写了一遍,程序和他的一模一样的,他能够上传成功,但是为什么我的程序就出现了异常呢?
程序如下:
  1. /*
  2. 客户端:
  3. 1.服务,端点
  4. 2.读取客户端已有的图片数据
  5. 3.通过socket输出流将数据发给服务端
  6. 4.读取服务端反馈信息
  7. 5.关闭资源
  8. */
  9. import java.io.*;
  10. import java.net.*;

  11. class PicClient
  12. {
  13.         public static void main(String[] args) throws Exception
  14.         {
  15.                 Socket s = new Socket("172.23.13.5",6666);

  16.                 FileInputStream fis = new FileInputStream("c:\\1.png");
  17.                 //将数据传送到网络流上
  18.                 OutputStream out = s.getOutputStream();
  19.                 byte[] buf = new byte[1024];
  20.                 int len = 0;
  21.                 while((len=fis.read(buf))!=-1)
  22.                 {
  23.                         out.write(buf,0,len);
  24.                 }
  25.                 s.shutdownOutput();
  26.                 //获取反馈信息
  27.                 InputStream in = s.getInputStream();
  28.                 byte[] bufIn = new byte[1024];
  29.                 int num = in.read(bufIn);
  30.                 System.out.println(new String(bufIn,0,num));

  31.                 fis.close();
  32.                 s.close();
  33.         }
  34. }

  35. /*
  36. 服务端
  37. */

  38. class PicServer
  39. {
  40.         public static void main(String[] args)throws Exception
  41.         {
  42.                 ServerSocket ss = new ServerSocket(6666);
  43.                
  44.                 Socket s = ss.accept();

  45.                 String ip = s.getInetAddress().getHostAddress();
  46.                 System.out.println(ip+".......connected");
  47.                
  48.                 InputStream in = s.getInputStream();

  49.                 FileOutputStream fos = new FileOutputStream("server.png");
  50.                
  51.                 byte[] buf = new byte[1024];
  52.                 int len = 0;
  53.                 while((len=in.read(buf))!=-1);
  54.                 {
  55.                         fos.write(buf,0,len);
  56.                 }
  57.                
  58.                 OutputStream out = s.getOutputStream();
  59.                 out.write("上传成功".getBytes());

  60.                 fos.close();
  61.                 s.close();
  62.                 ss.close();
  63.         }
  64. }
复制代码
问题:
1.客户端服务端的读写数据缓冲字节数组都设置的是1024,毕老师也是,上传了3M的图片,成功,而我上传了一个300KB的图片都没有成功,问题在哪儿?
2.编译能够通过,同时客户端也能够连接到到服务端,在服务端的从网络流读取到数据写入文件的时候报了数组角标越界异常,为什么会这样?
3.我尝试将1024改成了1024*300,还是出现同样的问题。请高手帮忙解答找找原因?谢谢
见图:

Server.png (12.55 KB, 下载次数: 13)

Server.png

Client.png (14.13 KB, 下载次数: 13)

Client.png

作者: 艮昕辶    时间: 2014-5-21 14:48
..毕老师写的应该是new byte[1024*1024]吧
感觉还是写小了
作者: leo_lzj    时间: 2014-5-21 20:01
艮昕辶 发表于 2014-5-21 14:48
..毕老师写的应该是new byte[1024*1024]吧
感觉还是写小了

他写的就是1024
作者: leo_lzj    时间: 2014-5-24 19:33
leo_lzj 发表于 2014-5-21 20:01
他写的就是1024

原来是第60行多了个分号,真粗心,放到Eclipse里一看就发现了。。。:Q:Q:Q:Q:Q:Q:Q




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