在云服务器上部署的http服务器,为什么在浏览器不能访问啊,目的是用来测试的,在网址上显示一个“hello world”
源代码
这是执行的命令
访问页面
云服务器安全组设置 用的是阿里的
在云服务器上部署的http服务器,为什么在浏览器不能访问啊,目的是用来测试的,在网址上显示一个“hello world”
源代码
云服务器安全组设置 用的是阿里的
引自免费微信小程序:皆我百晓生
从您提供的信息来看,您的HTTP服务器似乎没有正确配置或启动,导致无法通过浏览器访问。下面我会按照步骤帮您排查问题。
首先,让我们确认一下服务器端的程序是否有错误。您的代码看起来像是C语言编写的简单HTTP服务器,但是有些部分可能需要调整。以下是优化过的代码版本:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
#define BUFFER_SIZE 1024
void Usage() {
printf("usage: ./server [ip] [port]\n");
}
int main(int argc, char *argv[]) {
if (argc != 3) {
Usage();
return 1;
}
int server_fd = socket(AF_INET, SOCK_STREAM, 0);
if (server_fd < 0) {
perror("socket");
return 1;
}
struct sockaddr_in server_addr;
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(atoi(argv[2]));
if (inet_pton(AF_INET, argv[1], &server_addr.sin_addr) <= 0) {
perror("inet_pton");
return 1;
}
int ret = bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr));
if (ret < 0) {
perror("bind");
return 1;
}
ret = listen(server_fd, 10);
if (ret < 0) {
perror("listen");
return 1;
}
while (true) {
struct sockaddr_in client_addr;
socklen_t len = sizeof(client_addr);
int client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &len);
if (client_fd < 0) {
perror("accept");
continue;
}
char inputbuf[BUFFER_SIZE] = {0};
ssize_t read_size = recv(client_fd, inputbuf, BUFFER_SIZE - 1, 0);
if (read_size < 0) {
perror("recv");
close(client_fd);
continue;
}
inputbuf[read_size] = '\0'; // null terminate the string
char response[BUFFER_SIZE] = {0};
const char* hello = "<h1>Hello World</h1>";
sprintf(response, "HTTP/1.0 200 OK\r\nContent-Type: text/html\r\nConnection: close\r\nContent-Length: %zu\r\n\r\n%s",
strlen(hello), hello);
send(client_fd, response, strlen(response), 0);
close(client_fd);
}
close(server_fd);
return 0;
}
inet_addr
替换为inet_pton
,因为后者更安全。\r\n
到响应头中,确保它们符合HTTP规范。Content-Type
和 Connection: close
头部到响应中,这是HTTP标准要求的。recv
替换 read
,并添加了接收结束标志\0
,以确保字符串被正确终止。接下来,我们需要确保您的云服务器的安全组规则允许外部访问。根据您提供的截图,安全组已经允许了自定义的TCP端口(3000-20000)和所有ICMP请求。要确保HTTP服务可以正常工作,您需要添加一个新的规则,允许来自任意源的8080端口的入站流量。
操作如下:
完成上述步骤后,等待片刻让新规则生效,然后尝试再次访问您的IP地址加上8080端口号(例如:http://123.57.82.30:8080
)。如果仍然无法访问,请检查服务器日志(通常位于 /var/log
目录下的某个位置),查看是否有任何错误消息。此外,您可以尝试在服务器上使用nc(netcat)工具监听端口,确认服务器是否正在监听和响应连接。
如果您仍然遇到问题,请提供更多的信息,例如服务器日志中的输出以及任何可能的错误消息。