socket的bind函数是不是只能绑定本地IP,不能绑定外网IP么?

CString m_SiteInfo="xxx.xxx.xxx.xxx";//外网IP
addrSock.sin_addr.S_un.S_addr=inet_addr(m_SiteInfo.LockBuffer());
int retval;
retval=bind(m_socket,(SOCKADDR*)&addrSock,sizeof(SOCKADDR));
if(SOCKET_ERROR==retval)
{
closesocket(m_socket);
MessageBox("绑定失败!");
return FALSE;
}
运行时就出现“绑定失败”
如果把CString m_SiteInfo="xxx.xxx.xxx.xxx"里的IP改为本地IP是没有错误的。

当然是这样,因为你的网卡根本没有外网ip,它靠你的路由转发。

绑定地址都是本地地址,外网地址是路由器处理的,他会处理外网地址,同时把数据转发到你的程序ip,端口口。

介绍socket的时候,好多都是用接打电话来举例的,你的socket就相当于话机,你的话机肯定只能有一个电话号码,你怎么可能把你的电话绑定到别的号码上去