① 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那可麻煩了。不能做一個掃描器吧。