题目

需求:
使用tcp协议,编写客户端(有一个专门存放下载文件的目录files)和服务端(有一个专门存放资源的download目录):

  • 当客户端给服务端发送 “list”命令时,服务端给客户端响应download文件夹下所有的文件名称,客户端需要把接收到的文件名称打印到控制台
  • 当客户端给服务端发送 “服务端download文件夹下的文件名称” 命令时,服务端给客户端响应 download文件夹下对应的文件内容,客户端要把接受到的文件存储到 files 文件夹下
  • 服务端和客户端的通信需要在子线程中完成
  • 客户端给服务端发送一个命令,服务端给客户端响应一些内容,看做是一个流程,当这个流程完毕后,通信双方的socket都需要关闭,释放资源。

作答

ClientDemo.java

import java.io.*;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Scanner;public class ClientDemo {public static void main(String[] args) throws IOException {Scanner scanner = new Scanner(System.in);Socket socket = new Socket("127.0.0.1", 10000);BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(socket.getOutputStream());int count = 0;while (!scanner.nextLine().equals("list")){System.out.println("命令无效!");if (++count == 10){System.exit(0);}}bufferedOutputStream.write("list".getBytes());socket.shutdownOutput();BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));ArrayList<String> list = new ArrayList<>();String s;while ((s = bufferedReader.readLine()) != null){list.add(s);}bufferedReader.close();bufferedOutputStream.close();io:while (true){String inputChoices = scanner.next();boolean flag = false;for (String s1 : list) {if (inputChoices.equals(s1)){BufferedOutputStream bufferedOutputStream1 = new BufferedOutputStream(socket.getOutputStream());bufferedOutputStream1.write(s1.getBytes());flag = true;break io;}}if (!flag){System.out.println("未找到输入的文件!");}}BufferedInputStream bufferedInputStream = new BufferedInputStream(socket.getInputStream());BufferedOutputStream bufferedOutputStream1 = new BufferedOutputStream(new FileOutputStream("C:\\Users\\Ensio\\Desktop\\HeiMa\\题库(2)\\题库\\robin\\files\\"));socket.close();}
}

ServerDemo.java

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class ServerDemo {public static void main(String[] args) throws IOException {ServerSocket serverSocket = new ServerSocket(10000);Socket accept = serverSocket.accept();BufferedInputStream bufferedInputStream = new BufferedInputStream(accept.getInputStream());String str = readClient(bufferedInputStream);//  C:\Users\Ensio\Desktop\HeiMa\题库(2)\题库\robin\downloadFile file = new File("C:\\Users\\Ensio\\Desktop\\HeiMa\\题库(2)\\题库\\robin\\download");ArrayList<String> list = new ArrayList<>();if ("list".equals(str)) {BufferedWriter bufferedOutputStream = new BufferedWriter(new OutputStreamWriter(accept.getOutputStream()));writeFile(file, list, bufferedOutputStream);}BufferedInputStream bufferedInputStream1 = new BufferedInputStream(accept.getInputStream());String fileName = readClient(bufferedInputStream1);String filePath = findFilePath(fileName, file);BufferedOutputStream bufferedOutputStream2 = new BufferedOutputStream(accept.getOutputStream());BufferedInputStream bufferedInputStream2 = new BufferedInputStream(new FileInputStream(filePath));int len;while ((len = bufferedInputStream2.read()) != -1){bufferedOutputStream2.write(len);}bufferedInputStream.close();bufferedInputStream1.close();bufferedInputStream2.close();bufferedOutputStream2.close();serverSocket.close();}public static String findFilePath(String s, File file){File[] files = file.listFiles();String s1 = "";for (File file1 : files) {if (file1.isFile()){if (file1.getName().equals(s)){s1 += file1;}}else {findFilePath(s,file1);}}return s1;}public static String readClient(BufferedInputStream bufferedInputStream) throws IOException {byte[] bytes = new byte[1024];int len;String str = null;while ((len = bufferedInputStream.read(bytes)) != -1){str += new String(bytes, 0, len);}return str;}public static ArrayList<String> filePathToClient(File file, ArrayList<String> list){File[] files = file.listFiles();for (File file1 : files) {if (file1.isDirectory()){filePathToClient(file1 , list);}else {list.add(file1.getName());}}return list;}public static void writeFile(File file, ArrayList<String> list, BufferedWriter bufferedOutputStream) throws IOException {if (file.exists()){list = filePathToClient(file, list);for (String s : list) {bufferedOutputStream.write(s);bufferedOutputStream.newLine();}bufferedOutputStream.flush();bufferedOutputStream.close();}else {bufferedOutputStream.write("空文件夹!");}}
}

socket-Java相关推荐

  1. Socket java.net.SocketException: Connection reset的解决方案

    Socket java.net.SocketException: Connection reset的解决方案 参考文章: (1)Socket java.net.SocketException: Con ...

  2. socket java 发送多次 socket 已关闭_Socket客户端循环发送多条信息给服务端,发一次socket自动关闭?...

    目的:通过Socket客户端发送多条数据给服务端 错误: 我是客户端0,服务器说:欢迎您! java.net.SocketException: Socket is closed at java.net ...

  3. java毕业设计——基于java+Socket+Java GUI的银行排号系统设计与实现(毕业论文+程序源码)——排号系统

    基于java+Socket+Java GUI的银行排号系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Socket+Java GUI的银行排号系统设计与实现,文章末尾附有本毕 ...

  4. 利用Java GUI,结合Java Socket,Java多线程,服务器,制作一个简单的具有界面的多用户实时聊天程序(从GUI,到Socket,到多线程,到服务器,项目级别详细教程)

    目录 规划 Java GUI设计 Java Socket Java 服务器 利用 IntelliJ IDEA软件为例 首先,我们应当了解,像运行在两台电脑或者手机终端这样的程序一般是没有办法直接相互发 ...

  5. java 与 .net socket_java.net.Socket/java.net.ServerSocket-TCP Socket编程

    TCP 的 Java 支持 协议相当于相互通信的程序间达成的一种约定,它规定了分组报文的结构.交换方式.包含的意义以及怎样对报文所包含的信息进行解析,TCP/IP 协议族有 IP 协议.TCP 协议和 ...

  6. flex socket java,Flex的socket与java使用amf3进行通信

    amf3,adobe创立的数据格式由于使用二进制,没有了xml等冗余的字符数据量会少很多!而且很多测试报告均测出amf传递效果很高. 这次是使用Flex的Socket类与java的服务端进行通信, 步 ...

  7. socket java 服务器端_Java 简单的Socket通讯的服务器端实现

    最近学安卓开发,看到书上这个Socket通讯的实例,按照书上打的时候客户端一直连接不上,可能是网络问题或者虚拟机连接问题,所以就用控制台实现的客户端,这里是服务器端的.话不多说,直接贴代码 impor ...

  8. api有哪些 javasocket_socket及socket java api

    wiki上对于soket的定义 1.起源: 起源于https://tools.ietf.org/html/rfc147 2.套接字主要是在Internet模型的传输层中使用的概念.路由器和交换机等网络 ...

  9. common java socket,JAVA I/O(四)网络Socket和ServerSocket

    <Thinking in Enterprise Java>中第一章描述了用Socket和Channel的网络编程,核心即为Socket和Channel,本文简单讲述Socket的应用. S ...

  10. java服务器端socket,java 服务器端socket

    gistfile1.txt import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOExce ...

最新文章

  1. 想学python看什么书-我以前从没学过编程,学Python看什么书?
  2. hdu4467 graph
  3. window系统下安装mysql5.7教程
  4. 纽瓦克市政厅电脑遭勒索软件劫持,部分公共服务被迫瘫痪
  5. 博客教程中百度网盘地址
  6. python3 array为什么不能放不同类型的数据_小白入门Python数据科学全教程lt;一gt;...
  7. PHP简洁美观轻量级秀恩爱网站源码
  8. nginx优化(经典)
  9. java自定义异常(Exception、throws、try-catch)
  10. mysql 8.0安装_MySQL5.7升级到8.0过程详解
  11. SpringCloud常见面试题总结一
  12. bat批处理文件的简单解密方法(乱码)
  13. 计算机指法标准,标准盲打指法练习
  14. 计算机科学怎么撤稿,撤稿Nature后,这所大学在撤Science!
  15. jacob根据word模板生成文
  16. 用CSS3实现无限循环的无缝滚动
  17. 华为交换IP POOL地址池使用情况查询
  18. Android音频处理知识(一)MediaRecorder录制音频
  19. centos安装包安装最新版nginx
  20. 建设一个SaaS平台需要知道什么,做什么

热门文章

  1. 荣获2009年“微软最有影响力开发者”称号
  2. 剑指offer(C++)-JZ25:合并两个排序的链表(数据结构-链表)
  3. 连接Mysql弹出2005_正确安装数据库SQL2005和安装出现的问题的解决方法
  4. ali arthas 火焰图_阿里巴巴 Arthas 3.1.5版本支持火焰图,快速定位应用热点
  5. linux7inittab文件不存在,Linux下修复inittab文件丢失的两种方法
  6. cdr自动排版插件_CDR ymxkDoc插件 支持X72020到以后版本
  7. python一个函数可以有参数也可以没有参数_Python:有和没有关键字参数的lambda函数行为?...
  8. Python并发编程Futures
  9. jenkins运行web自动化测试找不到文件file not found
  10. 21天jenkins打卡Day4-新增账号