Java基础知识强化之网络编程笔记12:TCP之TCP协议上传文本文件并给出反馈
2015-10-12 19:22
1341 查看
1. 客户端:
(2)服务端:
package cn.itcast_12; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; /* * 按照我们正常的思路加入反馈信息,结果却没反应。为什么呢? * 读取文本文件是可以以null作为结束信息的,但是呢,通道内是不能这样结束信息的。 * 所以,服务器根本就不知道你结束了。而你还想服务器给你反馈。所以,就相互等待了。 * * 如何解决呢? * A:在多写一条数据,告诉服务器,读取到这条数据说明我就结束,你也结束吧。 * 这样做可以解决问题,但是不好。 * B:Socket对象提供了一种解决方案 * public void shutdownOutput() */ public class UploadClient { public static void main(String[] args) throws IOException { // 创建客户端Socket对象 Socket s = new Socket("192.168.12.92", 11111); // 封装文本文件 BufferedReader br = new BufferedReader(new FileReader( "InetAddressDemo.java")); // 封装通道内流 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter( s.getOutputStream())); String line = null; while ((line = br.readLine()) != null) { // 阻塞 bw.write(line); bw.newLine(); bw.flush(); } //自定义一个结束标记 // bw.write("over"); // bw.newLine(); // bw.flush(); //Socket提供了一个终止,它会通知服务器你别等了,我没有数据过来了 s.shutdownOutput(); // 接收反馈 BufferedReader brClient = new BufferedReader(new InputStreamReader( s.getInputStream())); String client = brClient.readLine(); // 阻塞 System.out.println(client); // 释放资源 br.close(); s.close(); } }
(2)服务端:
package cn.itcast_12; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class UploadServer { public static void main(String[] args) throws IOException { // 创建服务器端的Socket对象 ServerSocket ss = new ServerSocket(11111); // 监听客户端连接 Socket s = ss.accept();// 阻塞 // 封装通道内的流 BufferedReader br = new BufferedReader(new InputStreamReader( s.getInputStream())); // 封装文本文件 BufferedWriter bw = new BufferedWriter(new FileWriter("Copy.java")); String line = null; while ((line = br.readLine()) != null) { // 阻塞 // if("over".equals(line)){ // break; // } bw.write(line); bw.newLine(); bw.flush(); } // 给出反馈 BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter( s.getOutputStream())); bwServer.write("文件上传成功"); bwServer.newLine(); bwServer.flush(); // 释放资源 bw.close(); s.close(); } }
相关文章推荐
- android:安卓中5中网络请求库之Vellory OkHttp Retrofit
- 计算机网络
- Java基础知识强化之网络编程笔记11:TCP之TCP协议上传文本文件
- Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出
- “大师兄”社区(http://www.daxixiong.com/)欢迎你!!!
- 客户端通过http访问服务器端乱码问题的解决方案
- 网络编程 笔记(三) 套接字类型 协议设置
- iOS通过HTTP POST上传文件
- CPU亲缘性及网卡中断绑定
- 从源码安装apache httpd,并加载对php的支持
- ios测试基础一:mac下HTTP与HTTPS抓包
- POJ 1149 PIGS
- android中URLConnection和HttpURLConnection
- IOS网络编程简单介绍
- http\网络\
- HTTP协议初识
- Android中基于Http请求获取数据基础
- HTTP (http://) resource load since it is insecure.
- 错误代码:0x80070035 找不到网络路径
- ios-监听网络状态