gpt4 book ai didi

java - 能够发送http请求的TCP连接

转载 作者:行者123 更新时间:2023-12-01 14:01:05 24 4
gpt4 key购买 nike

我正在尝试构建一个简单的 Web 服务器(TCP),能够接收、处理和响应 http 请求。我已经在客户端和服务器之间建立了 TCP 连接,问题是,尽管我已经尝试过,但我还没有成功执行 http 请求。这些是 Java 中的客户端和服务器代码:

客户端类别:

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.net.Socket;

import java.net.UnknownHostException;

public class SocketCliente {

private String hostname;
private int porta;
Socket socketCliente;

public SocketCliente(String hostname, int porta){
this.hostname = hostname;
this.porta = porta;
}

public void connect() throws UnknownHostException, IOException{
System.out.println("Tentando se conectar com "+hostname+":"+porta);
socketCliente = new Socket(hostname,porta);
System.out.println("A conexão foi realizada");
}

public void readResponse() throws IOException{
String userInput;
BufferedReader stdIn = new BufferedReader(new InputStreamReader(socketCliente.getInputStream()));

System.out.println("Responsta do servidor:");
while ((userInput = stdIn.readLine()) != null) {
System.out.println(userInput);
}
}

public static void main(String arg[]){
//Creating a SocketClient object
SocketCliente client = new SocketCliente ("localhost",30000);
try {
//trying to establish connection to the server
client.connect();
//if successful, read response from server
client.readResponse();

} catch (UnknownHostException e) {
System.err.println("A conexão não pode ser estabelecida.");
} catch (IOException e) {
System.err.println("Conexão não estabelecida, pois o servidor pode ter problemas."+e.getMessage());
}
}
}

服务器类别

import java.io.BufferedReader;

import java.io.BufferedWriter;

import java.io.IOException;

import java.io.InputStreamReader;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.net.ServerSocket;

import java.net.Socket;


public class SocketServidor {

private ServerSocket serverSocket;
private int porta;

public SocketServidor(int porta) {
this.porta = porta;
}

public void start() throws IOException {
System.out.println("Começando o servidor na porta:" + porta);
serverSocket = new ServerSocket(porta);

//Listen for clients. Block till one connects

System.out.println("Esperando o cliente");
Socket client = serverSocket.accept();

//A client has connected to this server. Send welcome message
sendMensagemDeBoasVindas(client);
}

private void sendMensagemDeBoasVindas(Socket cliente) throws IOException {
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(cliente.getOutputStream()));
writer.write("A sua conexão com o SocketServidor foi feita");
writer.flush();
}

/**
* Creates a SocketServer object and starts the server.
*
* @param
*/
public static void main(String[] args) {
// Setting a default port number.
int portNumber = 30000;

try {
// initializing the Socket Server
SocketServidor socketServer = new SocketServidor(portNumber);
socketServer.start();

} catch (IOException e) {
e.printStackTrace();
}
}
}

我真的不知道如何发出http请求。我尝试创建一个 http 类,尝试从现有的 Client 类发送请求,但到目前为止没有任何效果。所有的谷歌搜索都没有帮助。

一位 friend 也在尝试这样做,他告诉我,在建立连接后,您需要将请求从 Client 类发送到 Server 类。我该怎么做?

请问你能帮我吗?

@罗宾-格林客户类别:

import java.io.*;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

public class SocketCliente {
private String hostname;
private int porta;
Socket socketCliente;

public SocketCliente(String hostname, int porta){
this.hostname = hostname;
this.porta = porta;
}

public void connect() throws UnknownHostException, IOException{
System.out.println("Tentando se conectar com "+hostname+":"+porta);
socketCliente = new Socket(hostname,porta);
System.out.println("A conexão foi realizada");
}

public void readResponse() throws IOException{
String userInput;
BufferedReader stdIn = new BufferedReader(new InputStreamReader(socketCliente.getInputStream()));

System.out.println("Responsta do servidor:");
while ((userInput = stdIn.readLine()) != null) {
System.out.println(userInput);
}
}
public void HTTPCliente() throws Exception{
PrintWriter out = new PrintWriter(new OutputStreamWriter(socketCliente.getOutputStream()));
System.out.println("GET / HTTP/1.1");
System.out.println("User-Agent: test/1.0");
System.out.println("Host: localhost");
System.out.println("Accept: */*");
}

public static void main(String arg[]){
//Creating a SocketClient object
SocketCliente client = new SocketCliente ("localhost",30000);
try {
//trying to establish connection to the server
client.connect();
//if successful, read response from server
client.readResponse();
try {
//se http obtiver sucesso
client.HTTPCliente();
} catch (Exception ex) {
Logger.getLogger(SocketCliente.class.getName()).log(Level.SEVERE, null, ex);
}

} catch (UnknownHostException e) {
System.err.println("A conexão não pode ser estabelecida.");
} catch (IOException e) {
System.err.println("Conexão não pode ser feita por problemas no servidor."+e.getMessage());
}
}

}

最佳答案

您需要发送如下内容:

GET / HTTP/1.1
User-Agent: test/1.0
Host: localhost
Accept: */*

所以也许:

PrintWriter out = new PrintWriter(new OutputStreamWriter(socketCliente.getOutputStream()));
out.println("GET / HTTP/1.1");
out.println("User-Agent: test/1.0");
out.println("Host: localhost");
out.println("Accept: */*");

但顺便说一句,这是低级、更复杂的方法。使用高级 API 可以更轻松地完成此操作。但我不知道,也许这个作业不允许这样做。

关于java - 能够发送http请求的TCP连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19345129/

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