JAVA 网络编程——客户端&服务器之间的文件上传和下载(TCP通信程序)
2020-02-04 11:08
483 查看
TCP通信程序
-
案例需求
客户端:数据来自于文本文件,接收服务器反馈
服务器:接收到的数据写入文本文件,给出反馈,代码用线程进行封装,为每一个客户端开启一个线程
-
案例分析
创建客户端对象,创建输入流对象指向文件,每读入一行数据就给服务器输出一行数据,输出结束后使用shutdownOutput()方法告知服务端传输结束 - 创建多线程类,在run()方法中读取客户端发送的数据,为了防止文件重名,使用计数器给文件名编号,接受结束后使用输出流给客户端发送反馈信息。
- 创建服务端对象,每监听到一个客户端则开启一个新的线程接受数据。
- 客户端接受服务端的回馈信息
代码实现
1.创建客户端对象,创建输入流对象指向文件,每读入一行数据就给服务器输出一行数据,输出结束后使用shutdownOutput()方法告知服务端传输结束
import java.io.*; import java.net.Socket; /* 客户端:数据来自于文本文件,接收服务器反馈 */ public class ClientDemo { public static void main(String[] args) throws IOException { //创建客户端Socket对象 //本机IP地址和端口,如果运行时报出java.net.BindException: Address already in use: NET_Bind异常, //表明端口号已被占用,则换一个1024到65535之间的端口号 Socket s = new Socket("192.168.111.1",10086); //封装文本文件的数据 BufferedReader br = new BufferedReader(new FileReader("myNet\\InetAddressDemo.java")); //封装输出流写数据 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); String line; while ((line=br.readLine())!=null) { bw.write(line); bw.newLine(); bw.flush(); } s.shutdownOutput(); //接收反馈 BufferedReader brClient = new BufferedReader(new InputStreamReader(s.getInputStream())); String data = brClient.readLine(); //等待读取数据 System.out.println("服务器的反馈:" + data); //释放资源 br.close(); s.close(); }
2.创建多线程类,在run()方法中读取客户端发送的数据,为了防止文件重名,使用计数器给文件名编号,接受结束后使用输出流给客户端发送反馈信息。
import java.io.*; import java.net.Socket; public class ServerThread implements Runnable { private Socket s; public ServerThread(Socket s) { this.s = s; } @Override public void run() { try { //接收数据写到文本文件 BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream())); // BufferedWriter bw = new BufferedWriter(new FileWriter("myNet\\Copy.java")); //解决名称冲突问题 int count = 0; File file = new File("35myNet\\Copy["+count+"].java"); while (file.exists()) { count++; file = new File("35myNet\\Copy["+count+"].java"); } BufferedWriter bw = new BufferedWriter(new FileWriter(file)); String line; while ((line=br.readLine())!=null) { bw.write(line); bw.newLine(); bw.flush(); } //给出反馈 BufferedWriter bwServer = new BufferedWriter(new OutputStreamWriter(s.getOutputStream())); bwServer.write("文件上传成功"); bwServer.newLine(); bwServer.flush(); //释放资源 s.close(); } catch (IOException e) { e.printStackTrace(); } } }
3.创建服务端对象,每监听到一个客户端则开启一个新的线程接受数据。
import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; /* 服务器:接收到的数据写入文本文件,给出反馈,代码用线程进行封装,为每一个客户端开启一个线程 */ public class ServerDemo { public static void main(String[] args) throws IOException { //创建服务器Socket对象 ServerSocket ss = new ServerSocket(10086); while (true) {//用while循环一直监听,有客户端请求则为每一个客户端开启一个线程 //监听客户端连接,返回一个对应的Socket对象 Socket s = ss.accept(); //为每一个客户端开启一个线程 new Thread(new ServerThread(s)).start(); } // ss.close(); } }
运行截图:
提示:
如果运行时报出java.net.BindException: Address already in use: NET_Bind异常,表明端口号已被占用,则换一个1024到65535之间的端口号。
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- JAVA_ 网络编程,写一个可以上传文件的服务器和客户端
- Java基础知识强化之网络编程笔记14:TCP之多个客户端上传到一个服务器的思考(多线程改进)
- java 网络编程之TCP通信和简单的文件上传功能
- java 网络编程之TCP通信和简单的文件上传功能实例
- 基于TCP网络通信的自动升级程序源码分析-客户端接收文件
- 基于TCP网络通信的自动升级程序源码分析-服务器发送文件
- java模拟TCP通信实现客户端上传文件到服务器端
- 黑马程序员 【】java学习之路——TCP(三)客户端上传文件到服务器
- Java基于TCP实现服务器和多客户端之间的通信
- 【Java学习笔记】60:客户端PC-后端程序服务器-数据库服务器之间的通信demo
- 基于TCP网络通信的自动升级程序源码分析-客户端接收文件
- Python网络编程之socket编程(一)--使用TCP和UDP客户端和服务器通信
- java网络编程____httpURLConnection上传下载文件
- Windows网络编程入门:简单的客户端和服务器通信程序调试
- java网络编程和io,多线程结合完成文件上传和下载案例
- Java基础知识强化之网络编程笔记09:TCP之客户端键盘录入服务器写到文本文件中
- Java基础知识强化之网络编程笔记10:TCP之客户端读取文本文件服务器控制台输出
- Java基础---Java---网络编程---TCP的传输、客户端和服务端的互访、建立一个文本转换器、编写一个聊天程序
- Java网络编程ServerSocket的实现服务器与用户之间的通信的基本步骤
- Windows网络编程入门:简单的客户端和服务器通信程序调试