从听连接提取IP和在C接受套接字编程在Linux中 [英] Extract IP from connection that listen and accept in socket programming in Linux in c

查看:148
本文介绍了从听连接提取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()

See the helpful description of how to use it over at the indispensable Beej's Guide to Network Programming.

这篇关于从听连接提取IP和在C接受套接字编程在Linux中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆