我的代码如下:(其中CListenSocket和CCommuSocket都是派生自CSocket,分别是监听套接字和连接套接字)
void CListenSocket::OnAccept(int nErrorCode)
{
CCommuSocket* pCommuSock = new CCommuSocket(); if (Accept(*pCommuSock))
{
SOCKADDR_IN SockAddr;
int nAddrlen = sizeof(SOCKADDR_IN);
pCommuSock->GetSockName((SOCKADDR*)&SockAddr, &nAddrlen);
....
}
.....
}
为什么我在GetSockName语句处设置断点,发现得到的SockAddr是服务器监听端口地址,而非接收连接端的端口地址。望请赐教
void CListenSocket::OnAccept(int nErrorCode)
{
CCommuSocket* pCommuSock = new CCommuSocket(); if (Accept(*pCommuSock))
{
SOCKADDR_IN SockAddr;
int nAddrlen = sizeof(SOCKADDR_IN);
pCommuSock->GetSockName((SOCKADDR*)&SockAddr, &nAddrlen);
....
}
.....
}
为什么我在GetSockName语句处设置断点,发现得到的SockAddr是服务器监听端口地址,而非接收连接端的端口地址。望请赐教
解决方案 »
- ON_EN_CHANGE(IDC_EDIT1, &loginDlg::OnEnChangeEdit1)//鼠标点击Edit控件不是这个消息吗?
- VirtualAlloc所谓的"多次提交"到底是什么意思?
- 通用控件自绘问题
- CSocket的发送数据出错(急!在线等~~~)
- 需要什么头文件吗?
- 请问怎样禁止监控系统的用户上网?????
- CWnd的create函数中有一个UINT nID参数,请问该参数干什么用的,用同一个id可以吗?
- 本人急需HTTP文件传输(上传)、POP3.STMP邮件(可支持SMTP身份验证、附件)VC源码,只要能运行就行,100分,限时专送!
- vc用MySQL C API远程连接MySql数据库服务器时间过长的问题。
- windowsapi字符串参数用的是LPCSTR,LPCTSTR这样的指针类型,为什么不用std::string,CString这样的类型传递参数和返回值?
- CSocket是阻塞的吗?我怎么可以通过派生CSocket的一个子类
- 怎么使用ATL编写的COM/COM+组件使其能返回ADOrecordset记录集给客户端?
{
CClientSocket* pClient;
pClient = new CClientSocket;
int nLength;
SOCKADDR_IN sockAddr;
IN_ADDR ipConnect;
nLength = sizeof(SOCKADDR_IN);
//同时获取对方的IP地址
if( Accept(*pClient,(SOCKADDR*)&sockAddr,&nLength) )
{
ipConnect = sockAddr.sin_addr;
sprintf( pClient->m_szClientAddr,"%d.%d.%d.%d",
ipConnect.S_un.S_un_b.s_b1,
ipConnect.S_un.S_un_b.s_b2,
ipConnect.S_un.S_un_b.s_b3,
ipConnect.S_un.S_un_b.s_b4); //自定义,根据地址获取主机名
GetHostNameByAddr(pClient->m_szClientName,pClient->m_szClientAddr); // 在列表中添加SeverSocket指针
// 在Client中完成断开连接时 m_ClientList 中成员的清除工作
pClient->m_pParent = (CSeverSocket*)this;
// 保存自已的爸爸到儿子的记忆中
// 儿子有数据处理时直接找到爷爷处理
pClient->m_pGrandpa = m_pParent ; pClient->CreateCanSendEvent();
m_ClientList.Add(pClient); TRACE0("已响应用户请求,在列表中的加入指针记录\n");
}
else
delete pClient; PostStateMsg();
CAsyncSocket::OnAccept(nErrorCode);
}
GetSockName这个函数用来接收本地接口的地址信息,
而且在调用该函数时必须用Accept返回的套接字调用。
返回的决对是本地连接套接字的地址。
但调用之前应保证已与对方取得连接
GetSockName()得到的是本端的socket地址。