Networking 接受返回的ip地址是什么

Networking 接受返回的ip地址是什么,networking,network-programming,ip-address,Networking,Network Programming,Ip Address,请参阅以下代码: accept(sockfd, (struct sockaddr*)&cliaddr, &slen); cout << inet_ntop(AF_INET, cliaddr.sin_addr, ipv4addr, 100); accept(sockfd,(结构sockaddr*)&cliaddr,&slen); cout我未经证实的猜测是,您得到的是IP v6地址,而不是v4地址,因此您的转换已关闭 您可能希望尝试使用netstat查找客户机的端口(

请参阅以下代码:

accept(sockfd, (struct sockaddr*)&cliaddr, &slen);
cout << inet_ntop(AF_INET, cliaddr.sin_addr, ipv4addr, 100);
accept(sockfd,(结构sockaddr*)&cliaddr,&slen);

cout我未经证实的猜测是,您得到的是IP v6地址,而不是v4地址,因此您的转换已关闭


您可能希望尝试使用netstat查找客户机的端口(通常会得到一种介于1025和65535之间的随机端口号),并查看该端口的十六进制值是否出现在cliaddr的十六进制表示形式中的某个位置。如果客户端端口与您认为的客户端地址之间存在关联,则您的转换是不正确的。

我未经证实的猜测是,您将返回IP v6地址,而不是v4地址,因此您的转换已关闭

您可能希望尝试使用netstat查找客户机的端口(通常会得到一种介于1025和65535之间的随机端口号),并查看该端口的十六进制值是否出现在cliaddr的十六进制表示形式中的某个位置。如果客户端端口与您认为的客户端地址之间存在关联,则您的转换不正确。

我的下一个猜测:

  On success, inet_ntop() returns a non-null pointer  to  dst.   NULL  is
       returned if there was an error, with errno set to indicate the error.
我的下一个猜测是:

  On success, inet_ntop() returns a non-null pointer  to  dst.   NULL  is
       returned if there was an error, with errno set to indicate the error.

是cout。调用
inet\u ntop()
时缺少第四个参数。下面是一个工作示例:


  int sockfd, fd;
  struct sockaddr_in saddr;
  socklen_t len = sizeof( saddr );
  char addr_buf[INET_ADDRSTRLEN]; /* defined in <netinet/in.h> */

  /* ... socket(), bind(), listen() */

  bzero( &saddr, len );
  if (( fd = accept( sockfd, ( struct sockaddr* )&saddr, &len )) == -1 )
  { perror( "accept" ); exit( 1 ); } /* watch out for EINTR */

  if ( inet_ntop( AF_INET, &saddr.sin_addr, addr_buf,
    INET_ADDRSTRLEN ) == NULL )
  { perror( "inet_ntop" ); exit( 1 ); }

  printf( "accepted connection from [%s:%d]\n",
    addr_buf, ntohs( saddr.sin_port ));
  ...

int-sockfd,fd;
saddr中的结构sockaddr_;
socklen_t len=sizeof(SADD);
char addr_buf[INET_addr trlen];/*定义于*/
/* ... 套接字(),绑定(),侦听()*/
bzero(和saddr,len);
if((fd=accept(sockfd,(struct sockaddr*)&saddr,&len))=-1)
{perror(“accept”);出口(1);}/*注意输入*/
如果(地址、地址、地址、,
INET_ADDRSTRLEN)==NULL)
{perror(“inet_ntop”);出口(1)}
printf(“已接受来自[%s:%d]\n]的连接”,
地址:ntohs(saddr.sin_港);
...

与网络通话时始终检查错误。

调用
inet\u ntop()
时缺少第四个参数。下面是一个工作示例:


  int sockfd, fd;
  struct sockaddr_in saddr;
  socklen_t len = sizeof( saddr );
  char addr_buf[INET_ADDRSTRLEN]; /* defined in <netinet/in.h> */

  /* ... socket(), bind(), listen() */

  bzero( &saddr, len );
  if (( fd = accept( sockfd, ( struct sockaddr* )&saddr, &len )) == -1 )
  { perror( "accept" ); exit( 1 ); } /* watch out for EINTR */

  if ( inet_ntop( AF_INET, &saddr.sin_addr, addr_buf,
    INET_ADDRSTRLEN ) == NULL )
  { perror( "inet_ntop" ); exit( 1 ); }

  printf( "accepted connection from [%s:%d]\n",
    addr_buf, ntohs( saddr.sin_port ));
  ...

int-sockfd,fd;
saddr中的结构sockaddr_;
socklen_t len=sizeof(SADD);
char addr_buf[INET_addr trlen];/*定义于*/
/* ... 套接字(),绑定(),侦听()*/
bzero(和saddr,len);
if((fd=accept(sockfd,(struct sockaddr*)&saddr,&len))=-1)
{perror(“accept”);出口(1);}/*注意输入*/
如果(地址、地址、地址、,
INET_ADDRSTRLEN)==NULL)
{perror(“inet_ntop”);出口(1)}
printf(“已接受来自[%s:%d]\n]的连接”,
地址:ntohs(saddr.sin_港);
...

在与网络通话时,请始终检查错误。

客户端使用属于AF_INET系列的套接字进行连接,并且正在本地主机上运行。我可能有另一种解释。请参阅我的其他答案。客户端使用属于AF_INET系列的套接字进行连接,并且正在本地主机上运行。我可能有其他解释。查看我的其他答案。为什么它会打印232.76.213.191我认为它与虚拟机有关。为什么它会打印232.76.213.191我认为它与虚拟机有关。我在代码中看到信号灯-确保其他线程在同一时间不使用相同的地址结构。也就是说,这可能是一个竞争条件。该代码不会将'slen'参数初始化为accept调用。确保将slen设置为sizeof(cliaddr)。@Nikolai:只有一个线程running@nos这回答了我的问题。我将slen初始化为sizeof(cliaddr),代码正常工作。但是如果我们不初始化slen,那么我们如何解释这个行为呢?我在代码中看到一个信号量——确保其他线程在同一时间不使用相同的地址结构。也就是说,这可能是一个竞争条件。该代码不会将'slen'参数初始化为accept调用。确保将slen设置为sizeof(cliaddr)。@Nikolai:只有一个线程running@nos这回答了我的问题。我将slen初始化为sizeof(cliaddr),代码正常工作。但如果我们不初始化slen,那么我们如何解释该行为?+“与网络通话时始终检查错误”+“与网络通话时始终检查错误”。