gpt4 book ai didi

c - 为什么我的程序输出为 "direct://"?

转载 作者:行者123 更新时间:2023-11-30 15:51:17 25 4
gpt4 key购买 nike

我正处于用 c 语言编写代理服务器的早期阶段,在调试时,我的程序给了我一个奇怪的简单输出,其中包含两行

直接://

直接://

这是什么意思?我以前从未发生过这种情况。当我不提供该程序执行所需的 3 个参数时,该程序甚至会输出此内容。

#include <pthread.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <time.h>
#include <string.h>

int main (int argc, char *argv[]){

if(argc!=3){
printf("Usage: proxy <IP address> <port no.>");
exit(1);
}

int csock, ssock, clen, slen;
int csocka, ssocka;
int rc, fd, ttl;
char method[40];
char uri[80];
char prot[40];
char cbuf[100];
time_t logtime;
char * pch;

struct sockaddr_in caddr;
struct sockaddr_in caddr2;
struct sockaddr_in saddr;
struct sockaddr_in saddr2;

csock = socket(AF_INET, SOCK_STREAM, 0);
caddr.sin_family = AF_INET;
caddr.sin_addr.s_addr = inet_addr(argv[1]);
caddr.sin_port = htons(atoi(argv[2]));
clen = sizeof(caddr);
rc = bind(csock, (struct sockaddr *) &caddr, clen);
if(rc < 0){
printf("bind failed");
exit(1);
}
rc = listen(csock, 5);
if(rc < 0){
printf("listen failed");
exit(1);
}
printf("hey");
csocka = accept(csock, (struct sockaddr *) &caddr2, &clen);
if(csocka < 0){
printf("accept failed");
exit(1);
}

while(1){
read(csocka,&cbuf,sizeof(cbuf));
time(&logtime); //time of req.
if(cbuf==NULL){
cerror("400 Bad Request: empty request");
write(csocka, &errbuf, sizeof(errbuf));
continue;
}
ttl = strlen(cbuf);
while(cbuf[ttl-1] == '\n' || cbuf[ttl-1] == '\r'){
cbuf[ttl--] = '\0';
}
if(sscanf(cbuf,"%[^ ] %[^ ] %[^ ]", method, uri, prot) != 3){
cerror("400 Bad Request: Unexpected number of arguments");
write(csocka, &errbuf, sizeof(errbuf));
continue;
}
if(method!="GET" || method !="HEAD"){
cerror("405 Method Not Allowed: GET/HEAD only");
write(csocka, &errbuf, sizeof(errbuf));
continue;
}
if(uri == (char*) 0){
cerror("400 Bad Request: empty url");
write(csocka, &errbuf, sizeof(errbuf));
continue;
}
printf("%s \n", cbuf);
}

close(csocka);

}

最佳答案

最可能的原因是您没有运行您的程序,而是运行某些系统程序。

如果您使用的是 Linux 计算机,请键入:

which <program name>

找出您实际运行的可执行文件。

类型:

./<program name>

改为运行您的程序(前提是您与可执行文件位于同一目录中)。

关于c - 为什么我的程序输出为 "direct://"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15249557/

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