bind 函数中sockaddr的意义

ip 的意义

  对于Client端来说,如果我们绑定了IP表明,这个IP是它的源IP。对于Server端来讲,绑定了IP表明 Server只能接受这个IP上的连接(也就是固定网卡接口了)。 举个列子如果server 绑定的是127.0.0.1 的话,它代表只能接本机的数据包不接受外面发生的数据包,也就是Server绑定127.0.0.1以后,外面client无法连接本地服务器。

0 的含义

   0给ipv4赋值的时候表示 INADDR_ANY ,这也就是表示让内核帮我们选择一个ip。内核选择IP地址的时机是当有一个连接Connect(TCP)也就是三次握手完毕后或者当一个UDP数据报被发出去, 此时内核才会为该socket绑定地址。
  选择IP地址的方式对于Tcp来说,如果是一个Server(listen态socket),内核是这样的,根据Client端发来的 SYN段中的目的端地址作为 源IP。如果是一个Client,内核会根据要连接的server的路由情况,从各个网卡中选择一个合适的IP地址。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MFC,使用Socket进行网络编程时,可以使用`bind`函数将一个套接字与本地IP地址和端口绑定在一起。`bind`函数用于服务器端,用来指定服务器要监听的IP地址和端口号。 以下是`bind`函数的使用方法: ```cpp BOOL bind( const SOCKADDR* lpSockAddr, // 指向一个SOCKADDR结构体,包含要绑定的IP地址和端口号信息 int nSockAddrLen // SOCKADDR结构体的长度 ); ``` 其,`lpSockAddr`参数是一个指向`SOCKADDR`结构体的指针,该结构体包含了要绑定的IP地址和端口号信息。可以使用`CSocket::Create()`函数创建一个套接字对象后,再通过`GetSockName()`函数获取本地IP地址和端口号,并将其填充到`SOCKADDR`结构体。 以下是一个简单的示例代码,演示了如何在MFC使用`bind`函数进行绑定: ```cpp // 创建服务器套接字 CSocket serverSocket; serverSocket.Create(); // 获取本地IP地址和端口号 sockaddr_in serverAddress; int serverAddressLength = sizeof(serverAddress); serverSocket.GetSockName((sockaddr*)&serverAddress, &serverAddressLength); // 设置服务器地址和端口号 serverAddress.sin_port = htons(12345); // 设置要监听的端口号 // 绑定套接字 if (serverSocket.Bind((sockaddr*)&serverAddress, sizeof(serverAddress)) == FALSE) { // 绑定失败处理... } // 监听连接请求 serverSocket.Listen(); ``` 请注意,上述代码只是一个简单示例,实际使用时可能需要进行错误处理和更全面的逻辑。同时,还需要注意在绑定之前,确保套接字已经被创建成功,并且设置了正确的地址族(AF_INET或者AF_INET6)和套接字类型(SOCK_STREAM或者SOCK_DGRAM)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值