gpt4 book ai didi

java套接字写入然后从套接字读取

转载 作者:行者123 更新时间:2023-12-02 04:56:55 26 4
gpt4 key购买 nike

我正在尝试用java编写一个简单的http服务器。到目前为止,这是我的代码:

服务器:

import java.net.*;
import java.io.*;
import java.util.*;
import java.util.regex.*;

public class Server
{
static final int PORT = 8080;
final String REQUEST_FORMAT = "^GET (.*?) HTTP/1.1$";
final Socket client;

public Server(Socket s)
{
client = s;
}

public void run()
{
try
(Scanner in = new Scanner(new InputStreamReader(client.getInputStream()));
PrintWriter out = new PrintWriter(client.getOutputStream(),true);)
{
String request = in.findInLine(Pattern.compile(REQUEST_FORMAT));
System.out.println(request);
out.write("HTTP/1.1 200 OK");
}
catch(Exception ex)
{
ex.printStackTrace();
}
}

public static void main(String []args)
{
try
(
ServerSocket server = new ServerSocket(PORT);
Socket client = server.accept();
)
{
Server s = new Server(client);
s.run();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}

客户:

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

public class Client
{
final int PORT = 8080;
String data = "GET /home/index.html HTTP/1.1";
public Client()
{
try
(Socket socket = new Socket("127.0.0.1",PORT);
PrintWriter out = new PrintWriter(socket.getOutputStream(),true);
Scanner in = new Scanner(new InputStreamReader(socket.getInputStream()));)
{
out.print(data);
String header1 = in.next();
System.out.println("header="+header1);
int status = in.nextInt();
System.out.println("status="+status);
String message = in.next();
System.out.println("message="+message);
}
catch(Exception ex)
{
}

}

public static void main(String []args)
{
Client c = new Client();
}
}

目前,客户端仅向服务器写入示例请求,服务器写入示例响应 header 。但服务器在读取请求后似乎无限期地等待客户端输入,而没有继续发送响应。请帮助解决这个问题。

最佳答案

如果您要实现 HTTP 服务器,则需要实现 HTTP 协议(protocol)。你没有这样做。您需要仔细阅读 RFC 2616,特别是有关内容长度 header 、Connection: close 和分块传输编码的部分,这些部分是确定传输内容长度的不同方法。

你也不是随时都在写台词。 HTTP 中的行终止符是 \r\n,,它不会出现在代码中的任何位置。

还有其他问题。您的服务器将只接受一个客户端,然后停止。它需要围绕接受代码进行循环,并且需要启动一个新线程来处理每个连接。

关于java套接字写入然后从套接字读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28676203/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com