//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;
}
}
// 创建链接时,“绑定失败!!!”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;
}
}
相应错误代码如下:
WSANOTINITIALISED:在使用此API之前应首先成功地调用WSAStartup()。
WSAENETDOWN:WINDOWS套接口实现检测到网络子系统失效。
WSAEADDRINUSE:所定端口已在使用中(参见setoption()中的SO_REUSEADDR选项)。
WSAEFAULT:namelen参数太小(小于sockaddr结构的大小)。
WSAEINPROGRESS:一个阻塞的WINDOWS套接口调用正在运行中。
WSAEAFNOSUPPORT:本协议不支持所指定的地址族。
WSAEINVAL:该套接口已与一个地址捆绑。
WSAENOBUFS:无足够可用缓冲区,连接过多。
WSAENOTSOCK:描述字不是一个套接口。另外,Socket环境的初始化最好在程序初始化时调用一次即可。
this->m_sockClientAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
this->m_sockServerAddr.sin_port = htons(m_usServerPort);端口被转了两次都分不清东西南北了吧
请求地址在其上下文中无效
但是我实在没有看出来bind有什么问题...
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();