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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 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, 下载次数: 9)

Server.png

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

Client.png

3 个回复

倒序浏览
..毕老师写的应该是new byte[1024*1024]吧
感觉还是写小了
回复 使用道具 举报
艮昕辶 发表于 2014-5-21 14:48
..毕老师写的应该是new byte[1024*1024]吧
感觉还是写小了

他写的就是1024
回复 使用道具 举报

原来是第60行多了个分号,真粗心,放到Eclipse里一看就发现了。。。:Q:Q:Q:Q:Q:Q:Q
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马