gcc/g++最简单编译当前目录下所有文件

gcc ./* -o output

是的你没看错就是可以用./*代指当前目录下所有文件

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的HTTP代理程序的示例代码,使用C语言编写。它使用了libcurl库来进行HTTP请求和响应的处理。 ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/socket.h> #include <arpa/inet.h> #include <netdb.h> #include <curl/curl.h> #define MAX_CLIENTS 10 #define BUFFER_SIZE 4096 int main(int argc, char *argv[]) { if (argc < 2) { printf("Usage: %s <port>\n", argv[0]); exit(EXIT_FAILURE); } int port = atoi(argv[1]); int server_fd = socket(AF_INET, SOCK_STREAM, 0); if (server_fd < 0) { perror("Failed to create socket"); exit(EXIT_FAILURE); } struct sockaddr_in server_addr, client_addr; memset(&server_addr, 0, sizeof(server_addr)); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = INADDR_ANY; server_addr.sin_port = htons(port); if (bind(server_fd, (struct sockaddr *)&server_addr, sizeof(server_addr)) < 0) { perror("Failed to bind socket"); exit(EXIT_FAILURE); } if (listen(server_fd, MAX_CLIENTS) < 0) { perror("Failed to listen on socket"); exit(EXIT_FAILURE); } printf("Listening on port %d...\n", port); while (1) { socklen_t client_addr_len = sizeof(client_addr); int client_fd = accept(server_fd, (struct sockaddr *)&client_addr, &client_addr_len); if (client_fd < 0) { perror("Failed to accept client connection"); continue; } char buffer[BUFFER_SIZE]; ssize_t num_bytes = recv(client_fd, buffer, BUFFER_SIZE, 0); if (num_bytes < 0) { perror("Failed to receive data from client"); close(client_fd); continue; } char *host = NULL; char *path = NULL; // Parse HTTP request to extract host and path if (sscanf(buffer, "GET http://%m[^/]/%ms HTTP/1.1\r\n", &host, &path) < 2) { perror("Failed to parse HTTP request"); close(client_fd); continue; } // Resolve hostname to IP address struct hostent *he = gethostbyname(host); if (he == NULL || he->h_addr_list[0] == NULL) { perror("Failed to resolve hostname"); close(client_fd); continue; } char ip_address[INET_ADDRSTRLEN]; inet_ntop(AF_INET, he->h_addr_list[0], ip_address, INET_ADDRSTRLEN); // Send HTTP request to server CURL *curl = curl_easy_init(); if (curl == NULL) { perror("Failed to create CURL handle"); close(client_fd); continue; } curl_easy_setopt(curl, CURLOPT_URL, buffer + 4); curl_easy_setopt(curl, CURLOPT_WRITEDATA, client_fd); struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "User-Agent: Mozilla/5.0"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); CURLcode res = curl_easy_perform(curl); if (res != CURLE_OK) { fprintf(stderr, "Failed to send HTTP request: %s\n", curl_easy_strerror(res)); close(client_fd); continue; } curl_slist_free_all(headers); curl_easy_cleanup(curl); close(client_fd); } close(server_fd); return 0; } ``` 该程序使用TCP套接字来侦听客户端连接,并使用libcurl库来发送HTTP请求和处理响应。当客户端连接到代理服务器时,它接收HTTP请求并解析出主机名和路径。然后,它使用gethostbyname函数将主机名解析为IP地址,并使用libcurl发送HTTP请求到该IP地址和路径。最后,它将HTTP响应发送回客户端。 为了编译该程序,请使用以下命令: ``` gcc -o proxy proxy.c -lcurl ``` 要运行该程序,请使用以下命令: ``` ./proxy <port> ``` 其中,`<port>`是代理服务器将侦听的端口号。请注意,客户端不能来自预先确定的IP地址,因为该程序没有实现IP地址过滤。如果您需要实现这个功能,请在程序中添加相应的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值