黑马程序员技术交流社区

标题: tcp图片上传 [打印本页]

作者: 光sail    时间: 2012-4-30 17:19
标题: tcp图片上传
  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纯净版的系统,是不是访问权限设置的问题
作者: 陈苓    时间: 2012-4-30 17:21
   找不到文件异常,你少输了个反斜杠E:\\1.jpg (系统找不到指

作者: 光sail    时间: 2012-4-30 17:50
格式化 发表于 2012-4-30 17:21
找不到文件异常,你少输了个反斜杠E:\\1.jpg (系统找不到指

没少,输了两个\\
作者: 陈苓    时间: 2012-4-30 18:13
    我刚把IP地址改成了127.0.0.1运行成功啦。一般建议没有路由器使用本机硬件默认ip
作者: 王杰    时间: 2012-4-30 21:10
本帖最后由 王杰 于 2012-4-30 21:12 编辑


作者: 林德燚    时间: 2012-4-30 21:56
bos没关流;在流里没写入到文件
作者: 张小锋    时间: 2012-5-2 13:52
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方法。
导致读写的数据很可能不完整,所以你显示的图片可能是一张不完整的图片。


作者: 蒋亮    时间: 2012-5-2 17:10
就报错信息来看的话,你E盘下没有1.jpg文件,刷不刷新无所谓,反正要close的,close执行的时候会先调用flush()刷新的




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