26-网络编程-16-网络编程(TCP协议-练习-上传文本文件)
2015-08-11 17:27
218 查看
/* * 【练习】从客户端向服务端上传文本文件 */ package UploadText; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class UploadClient { public static void main(String[] args) throws UnknownHostException, IOException { //1.建立客户端Socket对象 Socket s = new Socket("10.196.19.56",10006); //2.建立读取流,用于读取待上传的文本文件内容 BufferedReader bufr = new BufferedReader(new FileReader("client.txt")); //3.建立输出流,利用Socket特有方法获取输出流,将文件中数据输出到服务端 PrintWriter out = new PrintWriter(s.getOutputStream(),true); String line = null; while((line=bufr.readLine())!=null){ out.println(line); /* * 【如果没有结束标记】 * 这里客户端发送一行数据给服务端(下接UploadServer中while循环) * * 直到客户端数据全部发送完毕(下接UploadServer中while循环) */ } /* * 【特别注意】到这里位置客户端数据发送完毕,告诉服务端,即定义结束标记,用Socket类的特有方法: * public void shutdownOutput()throws IOException * 用于定义结束标记告诉服务端这边客户端结束 */ s.shutdownOutput(); //4.获取服务端反馈信息,即提示上传成功 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String str = bufIn.readLine();//不用循环读了,一个提示信息而已,读一行即可 System.out.println(str); //5.关闭资源 bufr.close(); s.close(); } }
=========================分割线=============================
package UploadText; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; public class UploadServer { public static void main(String[] args) throws IOException { //1.建立服务端ServerSocket对象 ServerSocket ss = new ServerSocket(10006); //2.通过ServerSocket类特有方法accept()获取客户端的Socket对象 Socket s = ss.accept(); System.out.println(s.getInetAddress().getHostAddress()+"connected......"); //3.读取客户端发来的数据 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); //由于客户端发来的是用字节流读取的文本数据,那么这里用转换流InputStreamReader将字节数据转为字符数据 //4.将上一步读取到的数据写到服务端文本文件中 BufferedWriter bufw = new BufferedWriter(new FileWriter("server.txt")); String line = null; while((line=bufIn.readLine())!=null){//先读取客户端的数据 bufw.write(line);//再写到服务端文件中 bufw.newLine();//每写一行数据,换行一次 /* * 【如果没有结束标记】 * (上接UploadClient中while循环)这里接收一行数据 * * (上接UploadClient中while循环)这里服务端还在等客户端数据,不知道客户端已经发完,所以readLine()阻塞,程序卡住不动 */ bufw.flush(); //由于接收到了客户端shutdownOutput()发来的结束标记,这里while循环结束 } //5.上传完毕后,将“上传完成”信息反馈给客户端 PrintWriter out = new PrintWriter(s.getOutputStream(),true); out.println("上传成功"); //6.关闭资源 bufw.close(); s.close(); ss.close(); } }
相关文章推荐
- 26-网络编程-14-网络编程(TCP协议-练习-文本转换服务端)
- 26-网络编程-13-网络编程(TCP协议-练习-文本转换客户端)
- 26-网络编程-12-网络编程(TCP协议-服务端和客户端交互)
- hdu 4068 福州赛区网络赛H 排列 ***
- 26-网络编程-10-网络编程(TCP协议-客户端)
- 26-网络编程-11-网络编程(TCP协议-服务端)
- 26-网络编程-09-网络编程(UDP协议-聊天程序)
- 26-网络编程-08-网络编程(UDP协议-接收端)
- 网络中的长连接和短链接
- 26-网络编程-07-网络编程(UDP协议-发送端)
- 26-网络编程-06-网络编程(域名解析)
- 26-网络编程-05-网络编程(IP对象_InetAddress)
- Android 网络学习之使用多线程下载,支持断点续传
- 26-网络编程-03-网络编程(网络要素-端口)
- 26-网络编程-04-网络编程(网络要素-传输协议)
- 26-网络编程-02-网络编程(网络要素-IP地址)
- 26-网络编程-01-网络编程(网络模型概述)
- HTTPS 双向认证
- RTP-RTCP协议分析
- android--访问网络权限