|
该代码实现了一个基本的HTTP客户端,可以从命令行传入服务器IP地址、端口号和URL,然后向服务器发送GET请求并打印响应。如果出现错误,会打印错误信息并返回非零值。需要注意的是,这个实现没有进行错误处理或超时控制,仅适用于简单的HTTP请求。
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <sys/socket.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- #define BUFFER_SIZE 4096
- int main(int argc, char* argv[]) {
- if (argc != 4) {
- printf("Usage: %s <server_ip> <server_port> <url>\n", argv[0]);
- return 1;
- }
- // 解析命令行参数
- char* server_ip = argv[1];
- int server_port = atoi(argv[2]);
- char* url = argv[3];
- // 创建socket
- int sock = socket(AF_INET, SOCK_STREAM, 0);
- if (sock < 0) {
- perror("socket creation failed");
- return 1;
- }
- // 设置服务器地址信息
- struct sockaddr_in server_addr;
- memset(&server_addr, 0, sizeof(server_addr));
- server_addr.sin_family = AF_INET;
- server_addr.sin_addr.s_addr = inet_addr(server_ip);
- server_addr.sin_port = htons(server_port);
- // 连接服务器
- if (connect(sock, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
- perror("connect failed");
- close(sock);
- return 1;
- }
- // 构造HTTP请求
- char request[BUFFER_SIZE];
- snprintf(request, BUFFER_SIZE, "GET %s HTTP/1.1\r\nHost: %s:%d\r\n\r\n", url, server_ip, server_port);
- // 发送HTTP请求
- if (send(sock, request, strlen(request), 0) < 0) {
- perror("send failed");
- close(sock);
- return 1;
- }
- // 接收HTTP响应
- char response[BUFFER_SIZE];
- int response_len = 0;
- while ((response_len = recv(sock, response, BUFFER_SIZE - 1, 0)) > 0) {
- response[response_len] = '\0';
- printf("%s", response);
- }
- if (response_len < 0) {
- perror("recv failed");
- close(sock);
- return 1;
- }
- // 关闭socket
- close(sock);
- return 0;
- }
复制代码
编译
gcc -o http_client http_client.c
运行:
./http_client <server_ip> <server_port> <url>
51单片机下运行
- #include <reg52.h>
- #define BUFFER_SIZE 512
- sbit led = P1^0;
- void delay(int ms) {
- int i, j;
- for (i = 0; i < ms; i++) {
- for (j = 0; j < 120; j++);
- }
- }
- void send_char(char c) {
- SBUF = c;
- while (TI == 0);
- TI = 0;
- }
- void send_string(char* str) {
- while (*str) {
- send_char(*str++);
- }
- }
- void main() {
- char server_ip[] = "192.168.1.100";
- int server_port = 80;
- char url[] = "/index.html";
- char request[BUFFER_SIZE];
- char response[BUFFER_SIZE];
- int response_len = 0;
- TMOD = 0x20;
- TH1 = 0xfd;
- TL1 = TH1;
- TR1 = 1;
- SM0 = 0;
- SM1 = 1;
- REN = 1;
- EA = 1;
- ES = 1;
- // 构造HTTP请求
- sprintf(request, "GET %s HTTP/1.1\r\nHost: %s:%d\r\n\r\n", url, server_ip, server_port);
- // 发送HTTP请求
- send_string(request);
- // 接收HTTP响应
- while (1) {
- while (RI == 0);
- response[response_len++] = SBUF;
- RI = 0;
- if (response_len >= BUFFER_SIZE) {
- break;
- }
- if (response[response_len-1] == '\n' && response[response_len-2] == '\r') {
- break;
- }
- }
- // 输出HTTP响应
- response[response_len] = '\0';
- send_string(response);
- while (1) {
- led = ~led;
- delay(500);
- }
- }
复制代码
|
|