TCP通信程序练习5
声明
文章仅用作个人学习,部分内容为参考他人文章,参考文章原文链接:https://blog.csdn.net/qq_46331050/article/details/117706050
5. 服务器可以接收多个客户端上传的文件,线程封装
- 客户端: 数据来自文本文件,接收服务器反馈
- 服务器:接收到的数据写入文本文件,给出反馈,代码用线程封装,为每一个客户端开启一个线程
示例代码
客户端程序是一致的,只有文件读取路径部分略有不同
public class ClientDemo1 {
public static void main(String[] args) throws IOException {
Socket s = new Socket("127.0.0.1", 10005);
// 封装文本文件的数据
BufferedReader br = new BufferedReader(new FileReader("clientDemo1.txt"));
// 封装输出流写数据
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();
}
}
服务器端
public class ServerDemo {
public static void main(String[] args) throws IOException {
// 创建服务器Socket对象
ServerSocket ss = new ServerSocket(10005);
while (true) {
// 监听客户端连接,返回一个对应的Socket对象
Socket s = ss.accept();
// 为每一个客户端开启一个线程
new Thread(new ServerThread(s)).start();
}
}
}
创建多线程
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("serverDemo.txt"));
// 解决名称冲突问题
int count = 0;
File file = new File("serverDemo[" + count + "].txt");
while (file.exists()) {
count++;
file = new File("serverDemo[" + count + "].txt");
}
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.shutdownOutput();
// 释放资源
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
需要注意的是:
- 服务器端不关闭,一直运行,开启多个客户端,可以生成多个文本文件
- 要注意文件名冲突问题,new多个File对象
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律