本帖最后由 dsh 于 2014-10-13 18:21 编辑
我的问题是上传图片,丢失了一部分.- <FONT color=black>package TCP_UploadPicture;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.BufferedReader;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStreamReader;
- import java.net.InetAddress;
- import java.net.Socket;
- /*
- *需求:在客户端向服务器端发送文件,当服务器接受完后,给客户端反馈一个上传成功的信息
- *客户端思路:
- *1.创建一个Socket对象,明确服务器端的ip和端口
- *2.源 文件 从指定位置读取文件 字符输入流 或者 字节输入流
- *3.目的 Socket 将读取的文件 发送到 服务器端 注意:当发送完数据后,给服务器端发送一个结束标记,告诉服务器以及上传完
- *4.源 网络 读取服务器端发送过来的反馈信息
- *5.目的 显示屏 将反馈信息显示
- *6.关闭资源
- */
- public class Client {
- public static void main(String[] args) throws IOException {
- // *1.创建一个Socket对象,明确服务器端的ip和端口
- Socket s = new Socket(InetAddress.getByName("127.0.0.1"), 10010);
- // *2.源 文件 从指定位置读取文件 字符输入流 或者 字节输入流
- //BufferedReader br = new BufferedReader(new FileReader("default.jpeg"));
- BufferedInputStream bis = new BufferedInputStream(new FileInputStream("file\\default.jpeg"));
- // *3.目的 Socket 将读取的文件 发送到 服务器端
- // 注意:当发送完数据后,给服务器端发送一个结束标记,告诉服务器以及上传完
- //PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
- BufferedOutputStream bos = new BufferedOutputStream(s.getOutputStream());
- /*String data = null;
- while ((data = br.readLine()) != null) {
- // System.out.println(data);
- pw.println(data);
- }*/
- //读取数据
- byte[] buf = new byte[1024];
- int len = -1;
- while((len = bis.read(buf))!=-1){
- bos.write(buf, 0, buf.length);
- }
- // public void shutdownOutput()禁用此套接字的输出流。对于 TCP 套接字,任何以前写入的数据都将被发送
- // ,并且后跟 TCP 的正常连接终止序列。
- s.shutdownOutput();// 此处是发送一个结束标志
- // *4.源 网络 读取服务器端发送过来的反馈信息
- BufferedReader brin = new BufferedReader(new InputStreamReader(
- s.getInputStream()));
- // *5.目的 显示屏 将反馈信息显示
- System.out.println(brin.readLine());
- // *6.关闭资源
- bis.close();
- s.close();
- }
- }
- <DIV class=blockcode>服务器端的代码
- <BLOCKQUOTE>package TCP_UploadPicture;
- import java.io.BufferedInputStream;
- import java.io.BufferedOutputStream;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.PrintWriter;
- import java.net.ServerSocket;
- import java.net.Socket;
- /*
- * TCP 上传文件 服务器端的思路
- * 1.创建ServerSocket服务器端对象,明确端口
- * 2.通过ServerSocket中的accept方法监听并获取客户端发过来的Socket对象
- * 3.源 Socket输入流 获取发送过来的数据
- * 4.目的 文件 将读取到的文件数据写到指定的位置
- *
- * 4.目的 Socket输出流 当上传完成后给客户端发送反馈信息
- * 5.关闭资源
- */
- public class Server {
- public static void main(String[] args) throws IOException {
- // * 1.创建ServerSocket服务器端对象,明确端口
- ServerSocket ss = new ServerSocket(10010);
- while(true){
- // * 2.通过ServerSocket中的accept方法监听并获取客户端发过来的Socket对象
- Socket s = ss.accept();
- // * 3.源 Socket输入流 获取发送过来的数据
- //BufferedReader brIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
- BufferedInputStream bis = new BufferedInputStream(s.getInputStream());
- // * 4.目的 文件 将读取到的文件数据写到指定的位置
- //PrintWriter out = new PrintWriter(new FileWriter("图片.jpeg"), true);
- BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("file\\11.jpeg"));
- // 读取数据
- /*String data = null;
- while ((data = brIn.readLine()) != null) {
- System.out.println(data);
- out.println(data);
- // bwOut.newLine();
- }*/
- byte[] buf = new byte[1024];
- int len = -1;
- while((len = bis.read(buf))!=-1){
- bos.write(buf, 0, buf.length);
- }
- // * 4.目的 Socket输出流 当上传完成后给客户端发送反馈信息
- PrintWriter pw = new PrintWriter(s.getOutputStream(), true);
- pw.println("上传成功");
- // * 5.关闭资源
- s.close();
- }
- }
- }
复制代码
复制了 但是丢失了一部分数据
|
|