Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C Web服务器-打印传入数据?_C_Webserver - Fatal编程技术网

C Web服务器-打印传入数据?

C Web服务器-打印传入数据?,c,webserver,C,Webserver,此C Web服务器将打印出来 got connection 通过终端。。为每一个网站服务 但我希望它也能打印出所有传入的原始数据 例如URL、客户端IP。。它基本上收到了什么 (无需排序,只需原始数据) #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 #包括 字符响应[]=“HTTP/1.1 200正常\r\n” “内容类型:text/html;字符集=UTF-8\r\n\r\n” “测试\r\n”; int main() { int one=1,客户端\u fd; svr\

此C Web服务器将打印出来

 got connection
通过终端。。为每一个网站服务

但我希望它也能打印出所有传入的原始数据

例如URL、客户端IP。。它基本上收到了什么
(无需排序,只需原始数据)

#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
字符响应[]=“HTTP/1.1 200正常\r\n”
“内容类型:text/html;字符集=UTF-8\r\n\r\n”
“测试\r\n”;
int main()
{
int one=1,客户端\u fd;
svr\u addr、cli\u addr中的结构sockaddr\u;
socklen\u t sin\u len=sizeof(cli\u addr);
intsock=socket(AF_INET,sock_STREAM,0);
if(sock<0)
错误(1,“无法打开插座”);
setsockopt(sock,SOL_SOCKET,SO_REUSEADDR,&one,sizeof(int));
int端口=81;
svr\u addr.sin\u family=AF\u INET;
svr_addr.sin_addr.s_addr=INADDR_ANY;
svr_addr.sin_port=htons(port);
if(bind(sock,(struct sockaddr*)和svr_addr,sizeof(svr_addr))=-1){
关闭(袜子);
错误(1,“无法绑定”);
}
听(短袜,5);
而(1){
client\u fd=accept(sock,(struct sockaddr*)&cli\u addr和sin\u len);
printf(“获得连接\n”);
如果(客户端\u fd==-1){
佩罗尔(“不能接受”);
继续;
}
写入(客户端\u fd,响应,sizeof(响应)-1);/*-1:“\0”*/
关闭(客户_fd);
}
}

您可以使用
inet\u ntoa
接收客户信息

只需使用
inet\u ntoa(cli\u addr.sin\u addr)
。您可以使用
recv
轻松捕获传入的原始数据,但随后必须将套接字设置为非阻塞。任何信息(url、用户代理)都将保存到recv缓冲区中

使用
printf(“[%s]-连接到服务器”,inet\u ntoa(cli\u addr.sin\u addr))将打印IP地址


希望有帮助

你自己试过什么吗?我对C一无所知。我现在只知道如何编译它。我在网上找到的我知道密码。。它必须沉下去。。printf(“获得连接\n”);但是我对C一无所知。那么要么学习C,要么找到一个现有的实用程序/代码来做你想做的。“我学习C的唯一方法就是这个程序为我打印出原始数据。”-对不起,这毫无意义。如果你想自己更新这个程序,让它做其他事情,你需要先学习C。这个网站不是代码工厂,也不是教程服务。在线和离线都有大量关于C的资源可供您学习。如何将其放入printf(“\n”)?你到底是什么意思?假设我从来没学过C。。我只知道PHP等等。。我怎样才能让它成为“print_r()”那样的东西?原始数据..将客户端地址更改为cli地址。在编写服务器之前最好先学习C。@vern0:我们既不是编码服务,也不是辅导服务。如果您想修改C代码,请学习该语言。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h> 
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <err.h>

char response[] = "HTTP/1.1 200 OK\r\n"
"Content-Type: text/html; charset=UTF-8\r\n\r\n"
"test\r\n";

int main()
{
  int one = 1, client_fd;
  struct sockaddr_in svr_addr, cli_addr;
  socklen_t sin_len = sizeof(cli_addr);

  int sock = socket(AF_INET, SOCK_STREAM, 0);
  if (sock < 0)
    err(1, "can't open socket");

  setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &one, sizeof(int));

  int port = 81;
  svr_addr.sin_family = AF_INET;
  svr_addr.sin_addr.s_addr = INADDR_ANY;
  svr_addr.sin_port = htons(port);

  if (bind(sock, (struct sockaddr *) &svr_addr, sizeof(svr_addr)) == -1) {
    close(sock);
    err(1, "Can't bind");
  }

  listen(sock, 5);
  while (1) {
    client_fd = accept(sock, (struct sockaddr *) &cli_addr, &sin_len);
    printf("got connection\n");

    if (client_fd == -1) {
      perror("Can't accept");
      continue;
    }

    write(client_fd, response, sizeof(response) - 1); /*-1:'\0'*/
    close(client_fd);
  }
}