网络编程_TCP协议的文件上传
2012-07-18 11:53
281 查看
1、需求分析:
①客户端向服务端上传一个文本文件
②服务端收到文件后,反馈一个结束信息,并打印"接收数据成功"
③客户端收到服务端的反馈后,打印"上传文件成功"
②从文件输入流读取文件,
③将读到的数据写入Socket输出流中
④关闭资源
详细的看代码注释;
②接收客户端的数据,并将数据写入文件
③接收完后,给客户端反馈"success"
④关闭资源
详细的见代码注释:
②整个流写完了,要做一个结束标记,这样结束端就可以结束,
使用s.shutdownOutput() ,即调用Socket的shutdownOutput方法往流里面添加一个-1,使readLine()=null,可以结束掉
①客户端向服务端上传一个文本文件
②服务端收到文件后,反馈一个结束信息,并打印"接收数据成功"
③客户端收到服务端的反馈后,打印"上传文件成功"
2、客户端:
①定义Socket、文件输入流、Socket输出流、Socket输入流②从文件输入流读取文件,
③将读到的数据写入Socket输出流中
④关闭资源
详细的看代码注释;
package day23.fileUpload; import java.net.*; import java.io.*; /** * @author Administrator @zsw 2012-7-18 上午09:21:04 * * 需求:从客户端上传文本文件到服务端 * * 客户端上传: * ①定义Socket、文件输入流、Socket输出流、Socket输入流 * ②从文件输入读取文件, * ③将读到的数据写入Socket输出流中 * ④关闭资源 */ public class FileClient { public static void main(String[] args) throws Exception{ //①:定义资源 Socket s=new Socket("127.0.0.1",10006); BufferedReader bufr=new BufferedReader(new FileReader("D:\\1.txt")); //字符流转换成字节流 BufferedWriter bufout=new BufferedWriter( new OutputStreamWriter(s.getOutputStream())); // PrintWriter out=new PrintWriter(s.getOutputStream(),true); BufferedReader bufin=new BufferedReader( new InputStreamReader(s.getInputStream())); //②上传数据 String line=null; while((line=bufr.readLine())!=null){ System.out.println(line); bufout.write(line); bufout.newLine(); bufout.flush(); } //③告诉服务器,客户端已经传完了。并接收服务端的反馈信息 s.shutdownOutput();//关闭客户端的输出流,相当于在流中写-1 String line2=null; while((line2=bufin.readLine())!=null){ if("success".equals(line2)){ System.out.println("上传文件成功!"); break; } } //④关闭资源 bufr.close(); s.close(); } }
3、服务端:
①、定义资源:ServerSocket、流②接收客户端的数据,并将数据写入文件
③接收完后,给客户端反馈"success"
④关闭资源
详细的见代码注释:
package day23.fileUpload; import java.io.*; import java.net.*; /** * @author Administrator @zsw 2012-7-18 上午09:43:46 * * 服务端: * 1、定义资源:ServerSocket、流 * 2、接收客户端的数据,并将其写入文件 * 3、接收完后,给客户端反馈"success" * 4、关闭资源 * * 总结: * ①使用了readLine这样的阻塞方法,由于它读数据丢弃了换行的数据 * 所有在写到流中的时候要添加换行数据 * ②整个流写完了,要做一个结束标记,这样结束端就可以结束 * 使用s.shutdownOutput() ,即调用Socket的shutdownOutput方法 * 往流里面添加一个-1,是readLine()=null,可以结束掉 */ public class FileServer { public static void main(String[] args) throws Exception { //①资源 ServerSocket ss=new ServerSocket(10006); Socket s=ss.accept(); //文件输出流 BufferedWriter bufw=new BufferedWriter(new FileWriter("D:\\tx\\1.txt")); //Socket 输出输入 BufferedReader bufin=new BufferedReader( new InputStreamReader(s.getInputStream())); BufferedWriter bufout=new BufferedWriter( new OutputStreamWriter(s.getOutputStream())); String ip=s.getLocalAddress().getHostAddress(); System.out.println(ip+" ....connnect "); //②:读数据、写到文件、判断结束、反馈成功 String line=null; /* * 服务端收不到line=null的情况,必须在流中添加结束标记 * s.shutdownOutput(); * 关闭客户端的输出流,相当于在流中写-1,line就可以=null */ //获取标记符(即时间值) while((line=bufin.readLine())!=null){ bufw.write(line); bufw.newLine(); bufw.flush(); } System.out.println("数据接收成功!"); bufout.write("success"); bufout.newLine(); bufout.flush(); s.shutdownOutput(); //不必资源 bufw.close(); s.close(); ss.close(); } }
4、问题总结
①使用了readLine这样的阻塞方法,由于它读数据丢弃了换行,所以在写到流中的时候要添加换行数据,否则会一直等待。②整个流写完了,要做一个结束标记,这样结束端就可以结束,
使用s.shutdownOutput() ,即调用Socket的shutdownOutput方法往流里面添加一个-1,使readLine()=null,可以结束掉
相关文章推荐
- 网络编程应用:基于TCP协议【实现文件上传】--练习
- 网络编程Socket文件上传到服务器
- Java网络编程--TCP文件上传、图片上传示例
- 基于TCP协议的Socket编程,实现文件的上传
- Android网络编程之使用HttpClient批量上传文件(一)
- Android网络编程之使用HttpClient批量上传文件
- C#网络编程之利用Form表达上传文件到服务器之二
- Java网络编程,上传文件
- Java网络编程实践和总结 --- 基于TCP的Socket编程之实现文件上传和下载服务
- {网络编程}和{多线程}应用:基于TCP协议【实现多个客户端发送文件给一个服务器端】--练习
- Android网络编程之Socket方式上传对象序列化文件(对象序列类)
- android网络编程之HttpUrlConnection的讲解--上传大文件
- 网络编程---Android开源组件(Async-http)实现文件上传
- 网络编程之实现文件上传下载
- 黑马程序员---网络编程之文件上传
- Android网络编程之Socket方式上传对象序列化文件(服务器端)
- iOS 网络编程 AFN 上传文件
- 网络编程之使用HttpClient上传文件的客户端和服务器
- 【tcp网络编程】TCP上传文件到服务器
- Android网络编程之使用HttpClient批量上传文件(二)AsyncTask+HttpClient并实现上传进度监听