我在accept
函数之后写了这样的代码
getpeername(rs,(struct sockaddr *)&clentaddr,&len);
然后在打印后客户端地址显示为0.0.0.0
你能帮我吗
rs
如果显示为绑定到,则必须是侦听套接字0.0.0.0
。尝试在. _accept()
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.
与 RAJESH 的回答类似,我们可以使用http://man7.org/linux/man-pages/man3/inet_ntop.3.htmlinet_ntop
中描述的功能。另一个答案中缺少的部分是必须将整体转换为 a而不是实际访问该成员。sin_addr
struct 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>
你的文件中。
accept()
在称为accept()
的第二个参数的结构中返回客户端的地址。
只有在没有错误发生时才保证这样做,因此检查系统调用的返回值总是一个好主意。
char IPAddress[16] = {0};
inet_ntop(AF_INET, &serveraddr.sin_addr.s_addr, IPChar, sizeof IPAddress);
printf("The source is %s.\n", IPAddress);
试试这个代码