在上面的代码中,我们定义了一个名为 TCPServer 的类,它使用 Java 的 Socket API 实现了一个简单的多线程 TCP 服务器。服务器监听 9000 端口,并在接收到客户端连接时启动

该代码展示了一个用Java编写的HTTP服务器,监听8080端口,接收客户端请求并提供静态网页。当接收到请求时,服务器读取指定路径的文件,如果文件存在则返回200状态码及文件内容,否则返回404错误页面。
摘要由CSDN通过智能技术生成
import java.io.*;
import java.net.*;

public class HTTPServer {
    
    public static final int PORT = 8080;
    public static final String WEB_ROOT = "www/";

    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(PORT);
            System.out.println("HTTP Server is running on port " + PORT);
            while (true) {
                Socket clientSocket = serverSocket.accept();
                System.out.println("Accepted connection from " + clientSocket.getInetAddress().getHostName());
                InputStream inputStream = clientSocket.getInputStream();
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                String request = reader.readLine();
                System.out.println("Received request: " + request);
                String[] tokens = request.split(" ");
                String filePath = WEB_ROOT + tokens[1];
                FileInputStream fileInputStream = null;
                boolean fileExists = true;
                try {
                    fileInputStream = new FileInputStream(filePath);
                } catch (FileNotFoundException e) {
                    fileExists = false;
                }
                String responseStatus = null;
                String responseBody = null;
                if (fileExists) {
                    responseStatus = "HTTP/1.1 200 OK";
                    responseBody = readFile(fileInputStream);
                } else {
                    responseStatus = "HTTP/1.1 404 Not Found";
                    responseBody = "<h1>404 Not Found</h1>";
                }
                String response = responseStatus + "\r\n" +
                                  "Content-Type: text/html\r\n" +
                                  "Content-Length: " + responseBody.length() + "\r\n" +
                                  "\r\n" + responseBody;
                OutputStream outputStream = clientSocket.getOutputStream();
                outputStream.write(response.getBytes());
                clientSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static String readFile(FileInputStream fileInputStream) throws IOException {
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int length;
        while ((length = fileInputStream.read(buffer)) != -1) {
            outputStream.write(buffer, 0, length);
        }
        return outputStream.toString();
    }
}

在上面的代码中,我们定义了一个名为 HTTPServer 的类,它使用 Java 的 Socket API 实现了一个简单的 HTTP 服务器。服务器监听 8080 端口,并在接收到客户端请求时提供静态网页文件。

在 main 方法中,我们首先创建一个 ServerSocket 对象,该对象绑定到端口 8080 并开始监听连接。然后,我们进入一个无限循环,在每次迭代中接受一个客户端连接,并读取其请求。我们从请求中提取文件路径,并尝试打开该文件以读取其内容。如果文件存在,则返回 HTTP 200 状态码和文件内容作为响应;否则,返回 HTTP 404 状态码和简单的“404 Not Found”消息。

最后,我们将响应发送回客户端,并关闭连接。在发送响应之前,我们需要将响应内容转换为字节数组,并计算内容长度和响应头部分。

要运行此代码,请将其保存在名为 HTTPServer.java 的文件中,并将 www/ 目录中的静态

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单TCP Server端的Java实现: ```java import java.io.*; import java.net.*; public class TCPServer { public static void main(String[] args) throws Exception { ServerSocket serverSocket = new ServerSocket(8080); // 创建ServerSocket对象,指定监听端口 System.out.println("Server started."); while (true) { Socket clientSocket = serverSocket.accept(); // 监听客户端连接请求 System.out.println("Client connected: " + clientSocket.getInetAddress().getHostAddress()); InputStream inputStream = clientSocket.getInputStream(); // 获取输入流 OutputStream outputStream = clientSocket.getOutputStream(); // 获取输出流 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); // 输入流读取器 PrintWriter writer = new PrintWriter(outputStream, true); // 输出流写入器,设置为自动刷新 String message = reader.readLine(); // 读取客户端发送过来的消息 System.out.println("Received message: " + message); writer.println("Server received message: " + message); // 向客户端发送消息 clientSocket.close(); // 关闭连接 System.out.println("Client disconnected."); } } } ``` 在该实现,创建了一个ServerSocket对象来监听指定端口连接请求。一旦有客户端连接,就获取到该客户端Socket对象,获取其输入输出流,然后进行消息的读取和发送,最后关闭连接并等待下一个连接请求。 需要注意的是,在实际的应用,需要在一个单独的线程进行Socket对象的监听和数据的处理,否则会导致主线程阻塞。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值