从听连接提取IP和在C接受套接字编程在Linux中 [英] Extract IP from connection that listen and accept in socket programming in Linux in c
本文介绍了从听连接提取IP和在C接受套接字编程在Linux中的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在以下code,我想接受传入连接后提取连接的客户端的IP地址。我应该怎么做后的接受()
来实现呢?
INT的sockfd,newsockfd,PORTNO,clilen;
PORTNO = 8090;
clilen = 0;
的pthread_t serverIn;
结构SOCKADDR_IN serv_addr,cli_addr;
的sockfd =插座(AF_INET,SOCK_STREAM,0);
如果(的sockfd℃,)
{
PERROR(错误打开插座);
}
bzero((字符*)及serv_addr,sizeof的(serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(PORTNO);
serv_addr.sin_addr.s_addr = INADDR_ANY;
如果(绑定(的sockfd,(结构sockaddr *)及serv_addr,sizeof的(serv_addr))小于0)
{
PERROR(关于绑定错误);
}听(的sockfd,5);
clilen = sizeof的(cli_addr);
newsockfd =接受(的sockfd,(结构sockaddr *)及cli_addr,&安培; clilen);
解决方案
getpeername()
请参阅如何在使用它的不可缺少的Beej的指南网络的有益说明编程。
In the following code I would like to extract the IP address of the connected client after accepting an incoming connection. What should I do after the accept()
to achieve it?
int sockfd, newsockfd, portno, clilen;
portno = 8090;
clilen = 0;
pthread_t serverIn;
struct sockaddr_in serv_addr, cli_addr;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0)
{
perror("ERROR opening socket");
}
bzero((char *) & serv_addr, sizeof (serv_addr));
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(portno);
serv_addr.sin_addr.s_addr = INADDR_ANY;
if (bind(sockfd, (struct sockaddr *) & serv_addr, sizeof (serv_addr)) < 0)
{
perror("ERROR on binding");
}
listen(sockfd, 5);
clilen = sizeof (cli_addr);
newsockfd = accept(sockfd, (struct sockaddr *) & cli_addr, &clilen);
解决方案
getpeername()
这篇关于从听连接提取IP和在C接受套接字编程在Linux中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文