当前位置: 首页 > 知识库问答 >
问题:

服务器返回客户端需要的任何文件

曾枫
2023-03-14

服务器

import java.io.*;
import java.net.*;

public class Server {
    public static void main(String[] args) throws IOException {
        ServerSocket serverSocket = null;

        try {
            serverSocket = new ServerSocket(9999);
        } catch (IOException ex) {
            System.out.println("Can't setup server on this port number. ");
        }

        Socket socket = null;
        InputStream in = null;
        OutputStream out = null;

        try {
            socket = serverSocket.accept();
        } catch (IOException ex) {
            System.out.println("Can't accept client connection. ");
        }

        try {
            in = socket.getInputStream();
        } catch (IOException ex) {
            System.out.println("Can't get socket input stream. ");
        }

        try {
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
            String line = br.readLine();
            System.out.println("File name = " + line);

            //Deixem nomes el nom del File o fitxer
            String fileName = line.replace("GET /", "");
            fileName = fileName.replace(" HTTP/1.1", "");
            System.out.println("File name is" + fileName);          

            out = new FileOutputStream(fileName);
        } catch (FileNotFoundException ex) {
            System.out.println("File not found. ");
        }

        byte[] bytes = new byte[16*1024];

        int count;
        while ((count = in.read(bytes)) > 0) {
            out.write(bytes, 0, count);
            System.out.println("Bytees "+count);
        }

        out.close();
        in.close();
        socket.close();
        serverSocket.close();
    }
}

正如您所看到的,我正在使用一个方法replace()来只保留文件名。客户机将是浏览器,它将请求一个文件,例如:

  • 客户端需要文件hello.txtlocalhost:9999/hello.txt
  • 服务器位于名为server.class的文件夹java/bin中
  • hello.txt文件位于java/files中
    null

共有1个答案

宓跃
2023-03-14

首先,听从乔恩·斯基特的建议

其次,如果您正在学习,那么请遵循以下
使用套接字进行写入和读取

问题是,您试图编写不是套接字流,而是文件,当然,如果您想做http服务器。您可以检查这个简单的http服务器问题

 类似资料:
  • 我已经使用java nio创建了一个客户端-服务器应用程序,它工作正常,但我的问题是,当服务器有许多连接到服务器的客户端时,服务器会响应错误的客户端,而不是请求客户端。例如,如果客户端A请求第一个人的信息,服务器将第一个人的信息返回给客户端B而不是客户端A。我已经尝试同步对象,但仍然无法正常工作,可能是什么问题。这是我的服务器示例代码

  • deployment.yaml: 当从nginx-ingress pod获取日志时,我们注意到状态代码是,这意味着它正在工作。 产出: 但是,客户端返回: https://github.com/kubernetes/ingress-nginx/issues/3746 任何帮助都将不胜感激。

  • 我的知识:-由于一致的哈希,Memcache本身是很小心的。 但是spymemcached 2.8.0是否提供了一致的哈希???

  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se

  • 前面的章节介绍了所有 Redis 的重要功能组件: 数据结构、数据类型、事务、Lua 环境、事件处理、数据库、持久化, 等等, 但是我们还没有对 Redis 服务器本身做任何介绍。 不过, 服务器本身并没有多少需要介绍的新东西, 因为服务器除了维持服务器状态之外, 最重要的就是将前面介绍过的各个功能模块组合起来, 而这些功能模块在前面的章节里已经介绍过了, 所以本章将焦点放在服务器的初始化过程,

  • NewTLSServer创建的服务器可以验证对显式从其创建的客户端的调用: 在行中。 但是,我有一个生产程序,我想将其设置为使用作为主机。我越来越 我称之为错误。 我如何设置与客户端进行身份验证,就像普通的HTTPS服务器一样?

  • 我正在尝试在JMeter中记录任何客户端-服务器活动作为学习的开始。我是从公司网络这样做的,因此必须通过代理。以下是我记录的步骤。 > 我在JMeter文档中读到,为了通过代理进行记录,我必须通过提供适当的代理从命令中调用。我用下面的代码来调用JMeter。 jmeter -H "取自互联网设置的代理地址"-P "8080" -u "域*用户名*" -a "密码"。 用这个JMeter调用fine

  • 我正在netty之上编写客户机-服务器应用程序。 我从一个简单的客户端登录服务器开始,该服务器通过数据库验证从客户端发送的信息。这一切都很好。 在客户端,我希望在收到来自服务器的响应后使用If语句,以确定登录凭据是否有效。这也很好用。我的问题是ChannelRead方法不返回任何内容。我不能改变这个。我需要它返回一个布尔值,允许登录尝试成功或失败。 一旦返回,我就会丢失数据的内容。 我尝试将msg