昨天使用一个WINSOCK做的聊天应用实例,服务器端在实现监听时出现无法绑定地址的问题。
对于这里的地址绑定实现,是通过对话框输入本机IP以及端口,利用bind()进行绑定,但总是提示绑定地址错误
这是一本书中的一个实例,代码认为没有问题,
我的问题是:这里绑定地址对于本机的网络有要求么?比如本机没有连接网络可以绑定成功么?不行的话为什么?
如果可以绑定,在对本机的IP进行设置时如何设置?
对于这里的地址绑定实现,是通过对话框输入本机IP以及端口,利用bind()进行绑定,但总是提示绑定地址错误
这是一本书中的一个实例,代码认为没有问题,
我的问题是:这里绑定地址对于本机的网络有要求么?比如本机没有连接网络可以绑定成功么?不行的话为什么?
如果可以绑定,在对本机的IP进行设置时如何设置?
不过得安装了TCP/IP协议,没有协议是不行的...
sockaddr_in serveraddr; serveraddr.sin_family = AF_INET; m_IP.GetWindowText(m_serverIP); //设置本机地址
serveraddr.sin_addr.S_un.S_addr = inet_addr(m_serverIP); UpdateData(TRUE);
//设置端口号
serveraddr.sin_port = htons(m_port); //绑定地址
if (bind(m_server,(sockaddr*)&serveraddr,sizeof(serveraddr)))
{
MessageBox("绑定失败");
return;
}
//开始监听
listen(m_server,50);这个是服务器端的绑定监听代码
不知道为什么绑定总是提示绑定失败--我输入的是本机设置的IP如果把绑定地址那段代码去掉 这个程序能正常运行,通过局域网也能实现所需的功能
需要改么?
不该是这里问题 ,就是本机IP绑定问题吧~
我把
//绑定地址
if (bind(m_server,(sockaddr*)&serveraddr,sizeof(serveraddr)))
{
MessageBox("绑定失败");
return;
}
这段给屏蔽了,这个程序就可以正常运行了,2台电脑连个局域网,能实现聊天的功能
不绑定指定IP就默认绑定本机IP吧,我想
if(bind(m_server,(sockaddr*)&serveraddr,sizeof(serveraddr))==SOCKET_ERROR)
{
MessageBox("绑定失败");
return;
}
我不清楚bind成功会返回什么值,你可以试试。另外未经绑定就能用套接字?我的书上只写了客户端可以这么用,你的是服务器端,看来也行了!
要用WSAStartUP....WSAClear
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD( 2, 2 );
err = WSAStartup( wVersionRequested, &wsaData );
if ( err != 0 ) {
/* Tell the user that we couldn't find a useable */
/* winsock.dll. */
return;
}
至于服务器绑定地址,我的意思这里是默认绑定本机IP而不是不绑定
WSAStartup(MAKEWORD(2,2),&wsd);