socket 获取外部地址
2015-01-14 16:40
176 查看
在linux内核中,一个socket有两个地址,一个本地地址,一个外部连接地址,。
如果使用udp协议,
在调用bind函数时,会把你要绑定的那个地址填到socket的本地地址那块地方.你要设成0.0.0.0它就给你填成0.0.0.0
在udp使用bind函数只是为了不用每此发送数据都填充地址这一参数传递过程而已.
只是在你发送数据时才会根据情况把实际的ip地址填到发送的数据的相应位置.
在内核接收到一个数据包时,会接收到一个外部地址,在你调用读函数时就把此地址读取走了.
如过使用tcp协议时,
在调用bind函数时,会把本地地址填到socket的本地地址那块地方.
在调用connect或则调用accecpt接收到连接时,回把外部地址那块填上.。在读写数据时,只读走数据,不会去读去地址的。
所以在tcp协议下,想通过recvfrom,sendto(一般用于无连接的套接字)去获取到外部连接的地址,是获取不到的,你得到的结果可能是0.0.0.0,可以再accpet之后获取到。
如果使用udp协议,
在调用bind函数时,会把你要绑定的那个地址填到socket的本地地址那块地方.你要设成0.0.0.0它就给你填成0.0.0.0
在udp使用bind函数只是为了不用每此发送数据都填充地址这一参数传递过程而已.
只是在你发送数据时才会根据情况把实际的ip地址填到发送的数据的相应位置.
在内核接收到一个数据包时,会接收到一个外部地址,在你调用读函数时就把此地址读取走了.
如过使用tcp协议时,
在调用bind函数时,会把本地地址填到socket的本地地址那块地方.
在调用connect或则调用accecpt接收到连接时,回把外部地址那块填上.。在读写数据时,只读走数据,不会去读去地址的。
所以在tcp协议下,想通过recvfrom,sendto(一般用于无连接的套接字)去获取到外部连接的地址,是获取不到的,你得到的结果可能是0.0.0.0,可以再accpet之后获取到。
SOCKADDR_IN g_clientAddr;
SOCKET g_clientSock;
int iAddrSize = sizeof(g_clientAddr); <span style="color:#cc0000;">memset((void*)&g_clientAddr, 0, sizeof(g_clientAddr)); //一定要初始化下地址变量,否则inet_ntoa得到结果会是204.204.204.204 </span>g_clientSock = accept(*serverSocket, (struct sockaddr *)&g_clientAddr, &iAddrSize); string strIP = inet_ntoa(g_clientAddr.sin_addr);
相关文章推荐
- 通过建立好连接的socket或者IP获取对端MAC地址
- SOCKET 编程 获取本机IP 地址
- 通过Socket configuration controls 获取网络设备地址
- 批量获取域名解析地址socket&&thread
- Socket编程中如何发送结构体,拼接多次接收消息及获取通信双方地址
- 通过IP或socket获取对方的MAC地址
- 通过socket连接获取本机IP地址
- Socket编程中如何发送结构体,拼接多次接收消息及获取通信双方地址
- socket 获取本机地址
- 通过IP或socket获取对方的MAC地址
- 通过IP或socket获取对方的MAC地址
- SystemTap----通过pid和fd来获取对应的socket实例地址
- 一起talk C栗子吧(第一百五十五回:C语言实例--获取socket通信地址)
- 通过外部接口方式获取详细地址信息
- 通过IP或socket获取对方的MAC地址
- Linux地址信息函数:获取本端和远端的socket地址
- 根据PE文件格式获取LoadLibraryA()/GetProcAddress()地址
- 获取本机IP地址的脚本
- 网卡MAC地址相关信息大全-2 获取网卡MAC的3个方法
- 如何通过VB获取网卡地址