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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 光sail 中级黑马   /  2012-4-30 17:19  /  2880 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.FileInputStream;
  4. import java.io.FileOutputStream;
  5. import java.net.ServerSocket;
  6. import java.net.Socket;

  7. public class UploadImage {

  8. public static void main(String[] args) {

  9. }

  10. }

  11. class ImageClient{
  12. public static void main(String[] args) throws Exception{
  13. Socket imageClientSocket = new Socket("192.168.0.107",10010);
  14. BufferedInputStream bis = new BufferedInputStream(new FileInputStream("E:\\1.jpg"));
  15. BufferedOutputStream bos = new BufferedOutputStream(imageClientSocket.getOutputStream());
  16. byte[] buf = new byte[1024];
  17. int len = 0 ;
  18. while((len=bis.read(buf))!=-1){
  19. bos.write(buf,0,len);
  20. }
  21. imageClientSocket.shutdownOutput();
  22. BufferedInputStream bis2 = new BufferedInputStream(imageClientSocket.getInputStream());
  23. byte[] buf2 = new byte[1024];
  24. int len2 = 0 ;
  25. while((len2=bis2.read(buf2))!=-1){
  26. System.out.println(new String(buf2,0,len2));
  27. }
  28. bis.close();
  29. imageClientSocket.close();

  30. }
  31. }

  32. class ImageServer{
  33. public static void main(String[] args) throws Exception{
  34. ServerSocket ss = new ServerSocket(10010);
  35. Socket s = ss.accept();
  36. BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
  37. BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("e:\\01.jpg"));
  38. byte[] buf = new byte[1024];
  39. int len = 0 ;
  40. while((len=bis.read(buf))!=-1){
  41. bos.write(buf, 0, len);
  42. }
  43. BufferedOutputStream bos2 = new BufferedOutputStream(s.getOutputStream());
  44. bos2.write("upload successful".getBytes());
  45. bos2.close();
  46. s.close();
  47. ss.close();
  48. }
  49. }
复制代码
连接服务端时,文件没拷贝成功,只建立个空的图片 端口也没被占用
报出的异常是 Exception in thread "main" java.io.FileNotFoundException: E:\1.jpg (系统找不到指
定的文件。)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:106)
        at java.io.FileInputStream.<init>(FileInputStream.java:66)
        at ImageClient.main(UploadImage.java:23)
,找不到文件,可是文件就存在E盘下,
我用的是深度xp纯净版的系统,是不是访问权限设置的问题

7 个回复

倒序浏览
   找不到文件异常,你少输了个反斜杠E:\\1.jpg (系统找不到指
回复 使用道具 举报
格式化 发表于 2012-4-30 17:21
找不到文件异常,你少输了个反斜杠E:\\1.jpg (系统找不到指

没少,输了两个\\
回复 使用道具 举报
    我刚把IP地址改成了127.0.0.1运行成功啦。一般建议没有路由器使用本机硬件默认ip
回复 使用道具 举报
本帖最后由 王杰 于 2012-4-30 21:12 编辑

  • while((len=bis.read(buf))!=-1){
  • bos.write(buf,0,len);
  • }
  • 你没有刷新
回复 使用道具 举报
bos没关流;在流里没写入到文件
回复 使用道具 举报
public class UploadImage {

public static void main(String[] args) {

}

}

class ImageClient{
public static void main(String[] args) throws Exception{
你的这个程序里出现了两个类,并且每个类中都有main函数,程序会执行public类里的那个main函数,结果就相当于什么都没做。
再则,这个如果改了过来,你的程序还是会有问题,因为每次执行bufferedOutPutStream流的write方法后,你没有调用flush方法。
导致读写的数据很可能不完整,所以你显示的图片可能是一张不完整的图片。

回复 使用道具 举报
就报错信息来看的话,你E盘下没有1.jpg文件,刷不刷新无所谓,反正要close的,close执行的时候会先调用flush()刷新的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马