作者 : 卿笃军
原文地址:http://blog.csdn.net/qingdujun/article/details/39324737
本文演示,TCP使用Socket进行网络文件传送,实现将客户端的文件upload.txt上传到服务器。
1)客户端,上传文件upload.txt,并接受服务器反馈上传成功与否消息。
2)服务器,接受客户端文件,将接收到的文件命名为Rece.txt,同时给客户端发送消息“上传成功”。
客户端,代码如下:
package upload.file.client; import java.io.BufferedReader; import java.io.FileReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; //客户端:上传文件 public class CUploadFileClient { public static void main(String[] args) throws Exception { Socket s = new Socket("127.0.0.1",8686); BufferedReader bufr = new BufferedReader(new FileReader("upload.txt")); PrintWriter out = new PrintWriter(s.getOutputStream(),true); String line = null; //狂读数据 while ((line = bufr.readLine()) != null) { //读一行,发送一行 out.println(line); } //关闭客户端输出流,相当于给流中加结束标记 s.shutdownOutput(); //接受服务端消息 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); String str = bufIn.readLine(); //打印服务器发送过来的消息 System.out.println(str); //关闭资源 bufr.close(); bufIn.close(); s.close(); } }
服务端,代码如下:
package upload.file.server; import java.io.BufferedReader; import java.io.FileWriter; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; //服务端:接受文件 public class CUploadFileServer { public static void main(String[] args) throws Exception{ //监听8686端口 ServerSocket ss = new ServerSocket(8686); System.out.println("服务器已启动,正在监听8686端口..."); //进入消息等待接受中... Socket s = ss.accept(); //显示客户端ip地址 String ip = s.getInetAddress().getHostAddress(); System.out.println(ip+"已连接"); //这里是getInputStream流 BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); //这里是FileWriter PrintWriter out = new PrintWriter(new FileWriter("Rece.txt"),true); String line = null; //狂读数据,往文件里写一行 while ((line = bufIn.readLine()) != null) { out.println(line); } //获得输出流,给客户端发送一条消息 PrintWriter pw = new PrintWriter(s.getOutputStream(),true); pw.println("上传成功"); //关闭资源 bufIn.close(); out.close(); pw.close(); s.close();ss.close(); } }
这里需要注意几点:
1)BufferedReader 是将数据读取到缓冲流,如果不用println(),则需要刷新缓冲流flush()。
2)readLine()读取是以换行结束,这时候如果不对结束加以处理,则很容易造成服务器客户端都进入阻塞状态。
运行效果显示:
1)启动服务端
2)启动客户端,上传文件
3)服务端和客户端链接成功
另外,需要上传文件和接收到的文件位置显示如下:
1)上传前
2)上传成功
参考文献: Java视频 毕向东 主讲
原文地址:http://blog.csdn.net/qingdujun/article/details/39324737
时间: 2024-10-17 05:01:48