int connect(SOCKET s, const struct sockaddr *name, int namelen);在上面的函数中,对sockaddr *name参数能否用相应ip对应的hostname呢?
在C:\WINDOWS\system32\drivers\etc\hosts文件中添加项如:
192.168.10.28 ServerIp在connect函数中的name参数能否用"ServerIp"这个字段呢,我用"ServerIp"字段connect时返回-1,失败不知各位大侠有什么方法在这个函数中用hostname而不是具体ip?谢谢。
如若可能同样能不能用相应的DNS而不是具体的ip呢?注:查看MSDN时看到CAsyncSocket::Connect函数可以用相应的名字,不知这里面是如何实现的?
BOOL Connect(
LPCTSTR lpszHostAddress,
UINT nHostPort
);
BOOL Connect(
const SOCKADDR* lpSockAddr,
int nSockAddrLen
);
在C:\WINDOWS\system32\drivers\etc\hosts文件中添加项如:
192.168.10.28 ServerIp在connect函数中的name参数能否用"ServerIp"这个字段呢,我用"ServerIp"字段connect时返回-1,失败不知各位大侠有什么方法在这个函数中用hostname而不是具体ip?谢谢。
如若可能同样能不能用相应的DNS而不是具体的ip呢?注:查看MSDN时看到CAsyncSocket::Connect函数可以用相应的名字,不知这里面是如何实现的?
BOOL Connect(
LPCTSTR lpszHostAddress,
UINT nHostPort
);
BOOL Connect(
const SOCKADDR* lpSockAddr,
int nSockAddrLen
);
解决方案 »
- 播放wav文件,需要注意什么?
- 急! 话框添加菜单栏,,熟悉xtream的请进
- LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of other libs; use /NODEFAULTLIB:library
- 求助:怎么改对话框上的静态文本的字体颜色?
- VC如何实现屏幕局部截图?
- 求助:到不存在的输出ADVAPI32
- 如何创建VC下的向导?
- 好久没来,升四个三角了,可用分还有4150,散之!
- 有谁知道加密狗与加密盘的原理
- 关于代码完成功能的问题!
- VC读取DSP里数据时遇到的奇怪问题,请教各位高手!
- MFC编程出现异常错误
用机器名的话里面会进行一次转换的
转换用gethostbynameBOOL CAsyncSocket::Connect(LPCTSTR lpszHostAddress, UINT nHostPort)
{
USES_CONVERSION_EX; ASSERT(lpszHostAddress != NULL); if (lpszHostAddress == NULL)
{
return FALSE;
} SOCKADDR_IN sockAddr;
memset(&sockAddr,0,sizeof(sockAddr)); LPSTR lpszAscii = T2A_EX((LPTSTR)lpszHostAddress, _ATL_SAFE_ALLOCA_DEF_THRESHOLD);
if (lpszAscii == NULL)
{
WSASetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
} sockAddr.sin_family = AF_INET;
sockAddr.sin_addr.s_addr = inet_addr(lpszAscii); if (sockAddr.sin_addr.s_addr == INADDR_NONE)
{
LPHOSTENT lphost;
lphost = gethostbyname(lpszAscii);
if (lphost != NULL)
sockAddr.sin_addr.s_addr = ((LPIN_ADDR)lphost->h_addr)->s_addr;
else
{
WSASetLastError(WSAEINVAL);
return FALSE;
}
} sockAddr.sin_port = htons((u_short)nHostPort); return Connect((SOCKADDR*)&sockAddr, sizeof(sockAddr));
}
如果用DNS的话,是不是要先设定DNS服务器才行啊?
对DNS不是很懂,本机能设定指向两个或三个不同地方DNS吗?谢谢
char* localIP; // Get the local host information
localHost = gethostbyname("www.microsoft.com");
localIP = inet_ntoa (*(struct in_addr *)*localHost->h_addr_list);这样确实能取到对应的IP了,不管你gethostbyname的参数是hostname或者DNS或者具体的ip,转换后都能取到对应的ip注:localHost和localIP都是指针,不知道是不是函数在给你传递值的同时也给你分配了内存,不知要不要自己delete掉对应的内存localHost和localIP?看过很多代码,都没有对此处的内存进行处理,什么机制没有内存泄露呢?
delete localHost;
delete localIP;
这两句中的任何一句处都会中断,说明此处的内存不用自己处理。(只是不知道系统什么时候怎么Release这两块内存的?)