-1

我在accept函数之后写了这样的代码

getpeername(rs,(struct sockaddr *)&clentaddr,&len);

然后在打印后客户端地址显示为0.0.0.0

你能帮我吗

4

5 回答 5

1

rs如果显示为绑定到,则必须是侦听套接字0.0.0.0。尝试在. _accept()

于 2013-01-09T07:53:09.020 回答
0
int accept(int s,
   struct sockaddr *addr,
   int *addrlen);

在上面的定义中,addr 存储了传入连接的地址

addr:-
The socket address of the connecting client that is filled in by accept 
before it returns. The format of addr is determined by the domain in which 
the client resides. This parameter can be NULL if the caller is not interested 
in the address of the client. If the addr parameter is not NULL, it points to
 a sockaddr structure.
于 2013-01-09T06:50:34.740 回答
0

与 RAJESH 的回答类似,我们可以使用http://man7.org/linux/man-pages/man3/inet_ntop.3.htmlinet_ntop中描述的功能。另一个答案中缺少的部分是必须将整体转换为 a而不是实际访问该成员。sin_addrstruct inaddr *s_addr

char clntIP[INET_ADDRSTRLEN];
inet_ntop(AF_INET, (struct inaddr *)&clntAddr.sin_addr,clntIP,sizeof(clntIP));
printf("client IP is %s\n",clntIP);

确保你也在#include <arpa/inet.h>你的文件中。

于 2013-11-12T20:42:58.833 回答
0

accept()在称为accept()的第二个参数的结构中返回客户端的地址。

只有在没有错误发生时才保证这样做,因此检查系统调用的返回值总是一个好主意。

于 2013-01-09T06:45:21.163 回答
0
char IPAddress[16] = {0};
inet_ntop(AF_INET, &serveraddr.sin_addr.s_addr, IPChar, sizeof IPAddress);

printf("The source is %s.\n", IPAddress);

试试这个代码

于 2013-01-09T10:15:31.960 回答