我在OnAccept和OnReceive各得到一个CSocket指针请问我现在怎样根据这个指针得到客户端的IP这里主要是CSocket可能有很多个,是个链
解决方案 »
- 使用thunk出现异常。。
- 对话框工程调用 SetDlgItemText 卡住
- CToolBar工具栏左上角怎么是透明色?
- 一个关于打开“无模式”对话框时,如何控制主窗口菜单按钮起不作用的问题
- 如何解决在获得硬盘物理ID时,只能运行在administrator下的问题?
- 怎么将通过浏览得到的数据库(*.mdb)文件赋给一个数据库控件?并显示出来呢?
- 关于窗体句柄
- 连接时出现如下错误--怎么回事??????????????
- 字符串合并是用+号吗?
- 背景图片上贴张透明图,为什么显示的是白色啊?
- VS2003无法启动
- 牛顿发现万有引力是因为当苹果炸到他头上的时候,他去思考。计算机高手是,当遇到问题时候,勇于思考 黑群!!!
int len = sizeof(addr);
Accept(*m_pClientSocket,(SOCKADDR*)&addr,&len);
TRACE(IP: %s; PORT: %d\n, inet_ntoa(addr.sin_addr), addr.sin_port);
请问OnReceive下呢?
|___CAsyncSocket
|__CSocket.可以看出,CSocket是从CAsyncSocket继承得到的。CAsyncSocket有一个方法GetPeerName可以得到对方的IP信息。
因此,答案就明了。void CMySocket::OnReceive(int nErrorCode)
{
CString sIP;
UINT nPort;
if(GetPeerName(sIp, nPort) == 0)
{
CString sInfo;
sInfo.Format("GetPeerName() failed! last error: %d", GetLastError());
AfxMessageBox(sInfo);
return;
} CString sInfo;
sInfo.Format("The peer IP:%s, port:%d", sInfo.operator LPCTSTR(), nPort);
AfxMessageBox(sInfo);
}
sInfo.Format("The peer IP:%s, port:%d", sIP.operator LPCTSTR(), nPort);
AfxMessageBox(sInfo);
{
char buff[1024];
int bufflen=1024; int nLen = CSocket::Receive(buff,bufflen);
m_pParentWnd->PostMessage (WM_UPDATEMSG,(WPARAM)buff,(LPARAM)nLen); SOCKADDR_IN ClientAddr;
int addr_length = sizeof(ClientAddr);
GetPeerName((SOCKADDR*)&ClientAddr,&addr_length);
CString strAddr = inet_ntoa(ClientAddr.sin_addr);//********Client IP
UINT IntProt = ClientAddr.sin_port; //*****************Client Port
CString strmp;
strmp.Format(":%d",IntProt);
AfxMessageBox(strAddr+strmp); CSocket::OnReceive(nErrorCode);
m_pWnd->ProcessPendingRead(this);
}
void CListenSocket::OnAccept(int nErrorCode)
{
CServerSocket* pSocket=new CServerSocket; SOCKADDR_IN ClientAddr;
int addr_length = sizeof(ClientAddr);
CSocket::Accept (*pSocket,(SOCKADDR*)&ClientAddr,&addr_length);
lpIp = inet_ntoa(ClientAddr.sin_addr);//********Client IP
nPort = ClientAddr.sin_port; //*****************Client Port
CString strmp;
strmp.Format(":%d",nPort);
AfxMessageBox(lpIp+strmp);
// m_list_pSocket.AddTail(pSocket); pSocket->m_pParentWnd=m_pParentWnd;
m_pParentWnd->PostMessage (WM_UPDATECONNECT,0,0);
CSocket::OnAccept(nErrorCode);
m_pWnd->ProcessPendingAccept();
}
以前,我用这两个函数得到的IP PROT值是不一样的,不知道为什么