黑马程序员技术交流社区
标题:
关于网络编程向服务器上传图片的问题
[打印本页]
作者:
dsh
时间:
2014-10-13 18:18
标题:
关于网络编程向服务器上传图片的问题
本帖最后由 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();
}
}
}
复制代码
复制了 但是丢失了一部分数据
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2