① VC 网络编程新手 求助关于客户端自动连接
首先,楼主要知道,如果服务器端没有开启,即服务器没有调用listen&accept,对connect的调用会导致这个函数一直不会返回(当然最终会返回,默认时间很长),但楼主是在OnTimer中调用connect的,WM_TIMER设为1秒是不合理的。
可以这样做对话框初始化设置SetTimer;
到时后,调用OnTimer,在OnTimer中先杀死Timer,然后再创建新的线程进行socket的处理,最后如果connect返回失败,可以在线程返回前再次SetTimer,这样做比较好。
另外,考虑到在新线程中的connect时,可能会关闭对话框,因此应该在OnClose中进行一些处理,如closesocket,这样可以强迫connect返回。这样可以使窗口被关闭后进程得体的被终止。
最后还要返回到新线程中对connect进行一些处理,必须让connect知道调用失败是因为连接超时还是因为SOCKET被强行关闭。因为如果是连接超时,那就可以再次SetTimer以便在下一秒再试着连接。如果是SOCKET被关闭了,connect不应该再次SetTimer,因为进程要退出了。代码如下:
ThreadProc() {
...
if (SOCKET_ERROR == connect(...)) {
if (WSAEINTR == WSAGetLastError()) {
//SOCKET被强行关闭导致错误代码为WSAEINTR
...
} else {
SetTimer(hwnd, 1, 1000, NULL);
}
}
...
}
注意,窗口被关闭时不能使用WSACleanup,因为connect后要使用WSAGetLastError,WSACleanup的调用要慎重,如在CWinApp::ExitInstance中。还有楼主在connect时第一个参数s是什么东西?是不是应该改为m_socket? 在OnTimer中调用不会返回的connect会使窗口界面出现“假死”.永远不要让窗口处理函数长时间的不能返回。如果要进行长时间的处理,应该另外开线程进行单独处理。
② VC如何编程实现访问外网
Client/Server模式可以用在广域网。
假设你要访问的IP是220.181.28.42 对方开了2345端口
CSocket sock;
sock.Create();
sock.Connect(220.181.28.42,2345);
这样就连接上了
③ vs安装显示网络无法连接失败
您好,方法
网络上的解决方式基本是两个,第一个,重装VC++2010库,但是不论下载哪个版本的文件,问题依旧存在。
第二个是重新下载它提示的文件VC_red.msi
但是单独下载这个文件,会提示无法安装,不适配。
这些方法都试过了,都无法解决,但是不安装C++库很多软件都无法运行,尤其类似CAD或者会声会影这些大型的软件,怎么办呢?
其实解决方法也比较简单,不用下载什么,也不用重装什么。我们首先仔细观察一下错误提示,下方有一个绝对路径。
提示源无法打开,检查一下,你的电脑肯定有前方的盘符。我们在安装过程中,打开这个盘符,一定可以找到这个路径。
注意一定是在安装中,如果退出安装,是无法找到此路径的。然后我们定位进入,会发现丢失的vc_red.msi。
定位安装即可,肯定可以成功。原因其实很简单,因为安装文件解压的时候没有解压到本目录,而是在其他根目录下面有一个临时生成的文件夹,就是一长串数字字母组成的,进去之后发现原来vc运行库安装位置默认是解压缩到这里了,但是由于目录名没取对,所以下一步无法进行。
④ VC怎么在对话框上面添加网页连接
如果你WINDOWS 的话 ,就用用
ShellExecute(NULL,TEXT("open"),TEXT("http://.com/"),NULL,NULL,SW_SHOWNORMAL);
⑤ vc网络编程断开连接的问题
调用socket的接收发送函数返回不正确,可以知道网络异常。
如果想知道网络状态但长时间不发送接收数据的话,可以做一个心跳机制,即每隔几秒来发送一个很小的包,检测返回值来确定网络状态
⑥ VC中怎么禁用网络连接
使用WMI即可。
Win32_NetworkAdapter 里有对应的Enable和Disable方法。你可以通过调用这个两个函数来启用和关闭网络连接。
Enable
Enables the network adapter.
Disable
Disables the network adapter.
⑦ VC++断开网络连接的程序
RasHangUp
这个函数的功能和用法都很简单,它只有一个参数,就是要挂断的拨号网络连接的句柄。我们可以利用
'RasEnumConnections获得当前系统所有RAS连接(通常我们的系统在一个时刻只使用一个拨号网络连接),利用这个函数我就可以得到RasHangUp所需的句柄了
⑧ 1、如何使用VC判断本地连接是否连接 2、如何使用VC判断无线网络是否连接
赞成楼上的说法!利用API 获得网卡信息,如果IP地址 网管知网掩码DNS都是正确的,说明的网络连接是正确的,当然分情况的 无线和有线。
⑨ VC++如何获取桌面上“网络连接快捷方式”的图标
嗯,系统的一些特殊图标不是你那样获取的,应该是用PIDL定位后去获取,你看一下我的代码
HICONGetIconForCSIDL(intcsidl)
{
LPITEMIDLISTpidl=0;
SHGetSpecialFolderLocation(NULL,csidl,&pidl);
if(pidl)
{
SHFILEINFOshellInfo;
SHGetFileInfo(LPCTSTR(pidl),FILE_ATTRIBUTE_NORMAL,
&shellInfo,sizeof(shellInfo),
SHGFI_PIDL|SHGFI_ICON);
IMalloc*pMalloc;
SHGetMalloc(&pMalloc);
if(pMalloc)
{
pMalloc->Free(pidl);
pMalloc->Release();
}
returnshellInfo.hIcon;
}
return0;
}
voidCTestICONDlg::OnOK()
{
//TODO:Addextravalidationhere
HICONhIcon=GetIconForCSIDL(CSIDL_NETWORK);
CClientDCdc(this);
dc.DrawIcon(0,0,(HICON)hIcon);
DestroyIcon(hIcon);
}
我测试过~可以绘制出图标~~其它的也类似,你换一下CSIDL_NETWORK,把它换成其它就获取其它图标了
⑩ 怎么用VC++编写一个检查网络连接的程序,以及是否能连接外部ftp服务器
gethostname()函数可以 满足你1 的要求,
2,就复杂了,如果你在程序中指定了IP 比较好办 GetSocketName()就可以检测出来,不成功就返回0.0.0.0 。
如果你是想随便就想知道能不能连一个随意的FTP那可麻烦了。不能做一个扫描器吧。