Win socket 的bind 不能绑定???(初学网络编程)

NDSC_120764567 2008-10-15 10:48:51
//MFC编程
// 创建链接时,“绑定失败!!!

void CServerDlg::OnBnClickedStratserver()
{
// TODO: Add your control notification handler code here
char buf[10];
int bufLen = 10;
int idAddrLen;
WSADATA wsaData;
unsigned short m_usServerPort;

this->GetDlgItem(IDC_STRATSERVER)->EnableWindow(true);
this->GetDlgItem(IDC_STOPSERVER)->EnableWindow(false);

this->UpdateData();

if(WSAStartup(MAKEWORD(2,1), &wsaData) != 0)
{
this->MessageBox(_T("Could not load Windows Sockets DLL."), NULL, MB_OK);
return;
}

m_usServerPort = htons(this->m_sPort);

this->m_sockServerAddr.sin_family = AF_INET;
this->m_sockClientAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
this->m_sockServerAddr.sin_port = htons(m_usServerPort);

this->m_hServerSocket = socket(AF_INET, SOCK_STREAM, 0);
if(this->m_hServerSocket == INVALID_SOCKET)
{
AfxMessageBox(_T("创建套接字失败!"));
return;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// bind
if(bind(this->m_hServerSocket, (LPSOCKADDR)&m_sockServerAddr, sizeof(m_sockServerAddr)) == SOCKET_ERROR)
{
AfxMessageBox(_T("绑定失败!!!"));
return;
}

// listen
if(listen(this->m_hServerSocket, 1) == SOCKET_ERROR)
{
AfxMessageBox(_T("监听错误!!!"));
return;
}

// accept
idAddrLen = sizeof(this->m_sockClientAddr);
this->m_hTempSocket = accept(this->m_hServerSocket, (struct sockaddr *)&m_sockClientAddr, &idAddrLen);
if(this->m_hTempSocket == INVALID_SOCKET)
{
AfxMessageBox(_T("读取错误!!!"));
return;
}


// Update Data.....
this->m_csIncomeMsg = buf;
this->UpdateData(false);

if(closesocket(this->m_hTempSocket) == SOCKET_ERROR)
{
AfxMessageBox(_T("关闭连接错误!!!"));
return;
}
}
...全文
267 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
DaXiaLv 2010-03-23
  • 打赏
  • 举报
回复
不能绑定“127.0.0.1”的。
xfjours 2008-10-21
  • 打赏
  • 举报
回复
1049:在其上下文中,该请求的地址无效。
xxf19860819 2008-10-21
  • 打赏
  • 举报
回复
我看你的程序端口绑定这里就绑定了一次,没问题的。
Evenque 2008-10-21
  • 打赏
  • 举报
回复

我的妈呀
还有这个广告到这儿来了
Joephia 2008-10-16
  • 打赏
  • 举报
回复
另外如果端口已经被绑定了一次

除非Shutdown(Socket)/CloseSocket(socket)

否则不能再次绑定
yize.link 2008-10-16
  • 打赏
  • 举报
回复
我觉得你用的this实在是太多了
kevin0808 2008-10-16
  • 打赏
  • 举报
回复
#define WSAEADDRNOTAVAIL 10049L
请求地址在其上下文中无效
但是我实在没有看出来bind有什么问题...
NDSC_120764567 2008-10-16
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 Joephia 的回复:]
另外如果端口已经被绑定了一次

除非Shutdown(Socket)/CloseSocket(socket)

否则不能再次绑定
[/Quote]

怎么在开始的时候知道改端口已被绑定??
怎么取消绑定?
NDSC_120764567 2008-10-16
  • 打赏
  • 举报
回复
ps:.h文件中的一些定义…………

private:
SOCKADDR_IN m_sockServerAddr;
SOCKADDR_IN m_sockClientAddr; // Socket address structure
SOCKET m_hTempSocket;
SOCKET m_hServerSocket;
public:
short m_sPort;
CString m_csIncomeMsg;
bool m_bServerControl;
afx_msg void OnBnClickedStratserver();
afx_msg void OnBnClickedCancel();
afx_msg void OnBnClickedStopserver();
Joephia 2008-10-15
  • 打赏
  • 举报
回复
m_usServerPort = htons(this->m_sPort);

this->m_sockServerAddr.sin_family = AF_INET;
this->m_sockClientAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
this->m_sockServerAddr.sin_port = htons(m_usServerPort);

端口被转了两次都分不清东西南北了吧
NDSC_120764567 2008-10-15
  • 打赏
  • 举报
回复
看来今天是解决不了了。。。。。。唉。。带着疑问睡觉吧……
NDSC_120764567 2008-10-15
  • 打赏
  • 举报
回复
我的socket初始化了吧。。。。。
xsc2001 2008-10-15
  • 打赏
  • 举报
回复
通过WSAGetLastError()获取相应错误代码。
相应错误代码如下:
  WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
  WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
  WSAEADDRINUSE:所定端口已在使用中(参见setoption()中的SO_REUSEADDR选项)。
  WSAEFAULT:namelen参数太小(小于sockaddr结构的大小)。
  WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
  WSAEAFNOSUPPORT:本协议不支持所指定的地址族。
  WSAEINVAL:该套接口已与一个地址捆绑。
  WSAENOBUFS:无足够可用缓冲区,连接过多。
  WSAENOTSOCK:描述字不是一个套接口。

另外,Socket环境的初始化最好在程序初始化时调用一次即可。
NDSC_120764567 2008-10-15
  • 打赏
  • 举报
回复
WSAGetLastError() 的值是10049,不知道什么意思啊。
  • 打赏
  • 举报
回复
用WSAGetLastError 看看返回的错误是啥

18,355

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧