. 如何获得与本机通信的客户端的地址,和是否使用了IOCP是没有关系的,在什么SOCKET调用方式中都是一样的,唯一的区别就是你提到的TCP和UDP的区别;
2. 在你的代码中使用WSARecvFrom来获得对端的IP地址是一个非常标准的做法,在UDP通信里面想要获得对方的IP地址基本就是这么做的。
3. 另外纠正一下你的一点小错误,就是getpeername并不是说只能用于TCP的,准确的说,getpeername只能用于已连接的SOCKET,这是什么意思呢?就是说如果使用UDP,但是调用了connect函数的话,那么同样服务器端可以用getpeername来获得连入客户端的地址。
是的,我没有说错,UDP也是一样可以进行connect的,和TCP的区别在于没有三次握手而已,但是同样也是可以使用send,recv来进行同通信,并且这么做还有一些其他的好处,这些内容在《UNIX网络编程》里说得很清楚,这里我就不细说,只是稍微提一下UDP进行了connect连接的好处,
在末连接UDP套接字上给两个数据报调用函数sendto导致内核执行下列六步:
1.连接套接字;
2.输出第一个数据报
3.断开套接字连接;
4.连接套接字,
5.输出第二个数据报;
6.断开套接字连接
已连接套接字发送两个数据报的导致内核执行如下步骤;
1.连接套接字;
2.输出第一个数据报;
3.输出第二个数据报。
对同一套接字发送时,某种程度上来讲,耗时减少1/3
转载于:https://www.cnblogs.com/duzouzhe/archive/2009/09/29/1576337.html