参考链接:https://blog.csdn.net/charthyf/article/details/81502143
SOCKET socketSrv = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
// 设置服务器地址
ZeroMemory(strRecv, BUF_SIZE);
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(PORT_);
// 绑定套接字
iRet = bind(socketSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
if (SOCKET_ERROR == iRet)
{
printf("bind failed%d!\n", WSAGetLastError());
closesocket(socketSrv);
WSACleanup();
}
{
SOCKET socketSrv = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
// 设置服务器地址
ZeroMemory(strRecv, BUF_SIZE);
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(PORT_);
// 绑定套接字
iRet = bind(socketSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
if (SOCKET_ERROR == iRet)
{
printf("bind failed%d!\n", WSAGetLastError());
closesocket(socketSrv);
WSACleanup();
}
}
{
SOCKET socketSrv = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
// 设置服务器地址
ZeroMemory(strRecv, BUF_SIZE);
addrSrv.sin_addr.S_un.S_addr = inet_addr("192.168.0.7");
addrSrv.sin_family = AF_INET;
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(PORT_);
// 绑定套接字
iRet = bind(socketSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
if (SOCKET_ERROR == iRet)
{
printf("bind failed%d!\n", WSAGetLastError());
closesocket(socketSrv);
WSACleanup();
}
}
// 程序运行结果3个bind都success
// 第1个bind 绑定真实地址 为 0.0.0.0 9999
// 第2个bind 绑定真实地址 为 127.0.0.1 9999
// 第3个bind 绑定真实地址 为 192.168.0.7 9999
如果给127.0.0.1 9999 发消息 第2个地址接收
如果给192.168.0.7 9999 发消息 第3个地址接收
如果 127.0.0.1 9999 未绑定,INADDR_ANY绑定时,由INADDR_ANY 9999 接收消息
如果 192.168.0.7 9999 未绑定,INADDR_ANY绑定时,由INADDR_ANY 9999 接收消息
INADDR_ANY 9999 可以接收本机所有ip 9999 的消息
127.0.0.1 9999 只能接收127.0.0.1 9999 的消息
192.168.0.7 9999 只能接收192.168.0.7 9999 的消息