本帖最后由 ixiangfeng 于 2014-2-26 13:02 编辑
- /*
- 练习:上传图片:从客户端上传一张图片到服务端,服务端返回“上传成功”信息
- 注意结束标记,否则会使程序一直等待,因为阻塞式方法读取不到信息
- 就会一直等待
- 客户端:
- 1.建立服务端点
- 2.读取客户端已有的图片数据
- 3.通过socket输出流将数据发送给服务端
- 4.读取服务端反馈信息
- 5.关闭资源
- 服务端:
- 1.建立服务端点
- 2.获取Socket对象
- 3.从Socket对象的读取流中获取图片信息
- 4.把图片写到硬盘中(复制)
- 5.返回反馈信息
- 6.关闭资源
- */
- import java.io.*;
- import java.net.*;
- class Client //客户端
- {
- public static void main(String [] args)throws Exception
- {
- //客户端关联本地一图片,写入到流中
- Socket s = new Socket("172.18.174.15", 1111);
- BufferedInputStream bufis = new BufferedInputStream(new FileInputStream("1.JPG"));
- BufferedOutputStream bufos = new BufferedOutputStream(s.getOutputStream());
- int len = 0;
- byte [] buf = new byte[1024];
- while ((len = bufis.read(buf)) != -1)
- {
- bufos.write(buf, 0, len);
- }
- s.shutdownOutput();
-
- BufferedInputStream bufis2 = new BufferedInputStream(s.getInputStream());
- byte [] bufIn = new byte[1024];
- int num = bufis2.read(bufIn);
- System.out.println(new String(bufIn, 0, num));
- s.close();
- bufis.close();
- bufos.close();
- bufis2.close();
- }
- }
- class Server //服务端
- {
- public static void main(String [] args)throws Exception
- {
- //读取客户端上传的图片,并复制保存一份,返回反馈信息
- ServerSocket ss =new ServerSocket(1111);
- Socket s = ss.accept();
- BufferedInputStream bufis = new BufferedInputStream(s.getInputStream());
- BufferedOutputStream bufos = new BufferedOutputStream(new FileOutputStream("12.JPG"));
- int len = 0;
- byte [] buf = new byte [1024];
- while ((len = bufis.read(buf)) != -1)
- {
- bufos.write(buf, 0, len);
- }
- s.shutdownInput();
- BufferedOutputStream bufos2 = new BufferedOutputStream(s.getOutputStream());
- bufos2.write("上传成功".getBytes());
-
- bufos2.close();
- s.close();
- ss.close();
- bufis.close();
- bufos.close();
- }
- }
复制代码
请问下这个程序哪里有问题?上传的时候总是不完整的 |