Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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
在socket中运行服务器代码时如何打印客户端地址_C_Linux - Fatal编程技术网

在socket中运行服务器代码时如何打印客户端地址

在socket中运行服务器代码时如何打印客户端地址,c,linux,C,Linux,我正试图修改一个正在侦听不同客户端的服务器代码,现在我想打印一行,如“从clinet地址获取连接”。但我如何实现这一点。这是服务器代码。 #包括 #包括 #包括 #包括 #包括 #包括 #包括 int main(int argc,char*argv[]) { int sockfd、newsockfd、端口号、pid; socklen_t clilen; 服务地址中的结构sockaddr\u,cli\u addr; 如果(argc

我正试图修改一个正在侦听不同客户端的服务器代码,现在我想打印一行,如“从clinet地址获取连接”。但我如何实现这一点。这是服务器代码。

#包括
#包括
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
int sockfd、newsockfd、端口号、pid;
socklen_t clilen;
服务地址中的结构sockaddr\u,cli\u addr;
如果(argc<2){
fprintf(stderr,“错误,未提供端口\n”);
出口(1);
}
sockfd=套接字(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
错误(“打开套接字时出错”);
bzero((char*)&serv_addr,sizeof(serv_addr));
portno=atoi(argv[1]);
serv_addr.sin_family=AF_INET;
serv_addr.sin_addr.s_addr=INADDR_ANY;
serv_addr.sin_port=htons(端口号);
if(bind(sockfd,(struct sockaddr*)&serv_addr,sizeof(serv_addr))<0)
错误(“绑定错误”);
听(sockfd,5);
clilen=sizeof(cli_addr);
而(1)
{
newsockfd=accept(sockfd,(struct sockaddr*)&cli\u addr,&clilen);
if(newsockfd<0)
错误(“接受错误”);
printf(“从%s获得连接,&cli\u addr);
pid=fork();
if(pid<0)
错误(“叉子上的错误”);
如果(pid==0)
{
关闭(sockfd);
出口(0);
}
其他的
关闭(newsockfd);
}/*结束时*/
关闭(sockfd);
返回0;/*我们永远无法到达这里*/
}
Printf(“从%s获得连接,&cli\u addr)


在这一行中,我必须使用函数将二进制ip地址转换为点表示法。

使用函数将二进制ip地址转换为点表示法。

使用inet\u ntop显示客户端地址,如下所示:

printf("Client Adress = %s",inet_ntop(AF_INET,&cli_addr.sin_addr,
                    clientname,sizeof(clientname)));

使用inet_ntop显示客户端地址,如下所示:

printf("Client Adress = %s",inet_ntop(AF_INET,&cli_addr.sin_addr,
                    clientname,sizeof(clientname)));

修复代码缩进。你怎么能用这样一个混乱的缩进来理解你的控制流呢?谁不能遵循这段代码的控制结构,谁就应该找另一份工作。但我同意,这很难看。谢谢大家,但我写了一个助手函数,可以在运行服务器代码修复代码缩进时打印clinet Ip地址。你怎么能用这样一个混乱的缩进来理解你的控制流呢?谁不能遵循这段代码的控制结构,谁就应该找另一份工作。但我同意,这很难看。谢谢大家,但我写了一个助手函数,可以在运行服务器代码时打印客户端Ip地址。我使用inet_ntop函数来完成我的工作!!无论如何,谢谢@OrcuccI,我认为
getnameinfo()
函数将优雅地完成这项工作。我使用inet\u ntop函数来完成我的工作!!无论如何,谢谢@OrcuccI,我认为
getnameinfo()
函数会很好地完成这项工作。