相信这个问题对稍微有点经验的人都不难,小弟初学,请指教。我的程序大概是这样的: CServer和CClient类派生于CSocket类,并创建各自的对象。服务器端:
CServer m_server;
CServer m_recv;
客户端:
CClient m_client;在服务端OnAccept()事件中:m_server.Accept(m_rcev); 于是建立了连接。我想知道服务器端如何知道客户端的IP地址?上次一个高手给出代码如下:
if (m_pSocket->Accept(*pSocket,(struct sockaddr FAR *) &acc_sin, (int FAR *) &acc_sin_len ))
{
pSocket->Init();
char *destIP = inet_ntoa(acc_sin.sin_addr);//获得客户IP地址
}
我匆忙结了帖子。结果发现自己基础太差根本看不懂。请大家告诉我应该添加代码在什么位置,还有那些变量(比如acc_sin)是哪里冒出来的有什么用,不然用另一种方法来做也好。谢谢!
CServer m_server;
CServer m_recv;
客户端:
CClient m_client;在服务端OnAccept()事件中:m_server.Accept(m_rcev); 于是建立了连接。我想知道服务器端如何知道客户端的IP地址?上次一个高手给出代码如下:
if (m_pSocket->Accept(*pSocket,(struct sockaddr FAR *) &acc_sin, (int FAR *) &acc_sin_len ))
{
pSocket->Init();
char *destIP = inet_ntoa(acc_sin.sin_addr);//获得客户IP地址
}
我匆忙结了帖子。结果发现自己基础太差根本看不懂。请大家告诉我应该添加代码在什么位置,还有那些变量(比如acc_sin)是哪里冒出来的有什么用,不然用另一种方法来做也好。谢谢!
The SOCKADDR structure has the following form:struct sockaddr {
unsigned short sa_family;
char sa_data[14];
};The SOCKADDR structure is used to store an Internet Protocol (IP) address for a machine participating in a Windows Sockets communication.
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
int iNameLen;
iNameLen = sizeof(sockaddr_in);
memset(&SockAddr, 0, iNameLen);
getpeername(Accept,(sockaddr *)&SockAddr,&iNameLen);
char *pConnectIP = NULL;
pConnectIP = inet_ntoa(SockAddr.sin_addr);