線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2450
推到 Plurk!
推到 Facebook!

TIdUDPServer 的Broadcast在Vista下無法發出

答題得分者是:careychen
hughes0201
一般會員


發表:12
回覆:10
積分:9
註冊:2008-11-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-09-09 14:14:22 IP:61.31.xxx.xxx 訂閱
各位前輩,小弟寫了一個簡單的廣播程式和公司的機器溝通,在Windows XP下可以正常運作,
在Vista下卻無法運作,使用wireshark來抓取封包,可是連發出封包的訊息也都沒有看到。
後來使用winsocket直接來發廣播封包,可是也是沒有看到發出的封包。

小弟的IDE是BCB6,以下是部分的發播包程式:

[code cpp]
// udpSearch為一個 TIdUDPServer元件
String aBufStr;
char Buf[4] = {0};

Buf[3] = GET_MAC;
aBufStr.SetLength(5);
CopyMemory(&aBufStr[1], Buf, 4);
if (!udpSearch->Active) udpSearch->Active = true;
// 使用TIdUDPServer 發廣播封包
udpSearch->Broadcast(aBufStr, XPORT_BROADCAST_PORT);
// 使用winsocket發廣播封包
BoradCast(XPORT_BROADCAST_PORT, Buf);

.....
.....
// 使用winsocket發廣播封包的function
void __fastcall BoradCast(const int port, char* buffer)
{
SOCKET sd;
SOCKADDR_IN addr;
BOOL bBroadcast=true;
sd = socket(AF_INET,SOCK_DGRAM,0);
setsockopt(sd,SOL_SOCKET,SO_BROADCAST,(LPSTR)&bBroadcast,sizeof(BOOL));
addr.sin_family = AF_INET;
addr.sin_port = htons(port);
addr.sin_addr.s_addr = INADDR_BROADCAST;
sendto(sd,buffer,sizeof(buffer),0,(LPSOCKADDR)&addr,sizeof(SOCKADDR));
}
[/code]

請問可能錯誤的方向為何?

careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-09-11 14:55:14 IP:218.211.xxx.xxx 訂閱
使用 Delphi 或 BCB 加上 Indy 開發時,會碰上 Vista 中 UAC 管控的問題,
所以要讓您的程式可在 Vista 下執行請準備一個檔案叫 UAC.manifest ( 檔名隨意 )

在裡面打上


[code delphi]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>




// 這個 asInvoker 就是會讓 Vista 自動彈出是否允許執行的視窗




[/code]

其中 asInvoker 也可換成 requireAdministrator
差別在,執行者的身份不同

將上面的 UAC.manifest 存檔後,再打開文字檔為 UAC.rc,內容如下:

UAC 24 UAC.manifest

存檔後使用 brcc32 編繹成 UAC.res 後在您的 dpr 中加入這個 res 檔就可以了

{$R UAC.res}



------
價值的展現,來自於你用哪一個角度來看待它!!
hughes0201
一般會員


發表:12
回覆:10
積分:9
註冊:2008-11-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-09-14 11:52:21 IP:61.31.xxx.xxx 訂閱
 感謝大大~~~可以了~~
方便再請問一個問題嗎?程式是被UAC鎖住,那上面的內容是大大你是用什麼原理來解決的呢?
照上面的做法可以解決,只是我不太懂這個原理~~><,比較好奇~~


careychen
尊榮會員


發表:41
回覆:580
積分:959
註冊:2004-03-03

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-09-14 12:40:37 IP:218.211.xxx.xxx 訂閱
HI, 原理可以參考小弟在另一篇分享的資料

在 Delphi 中加入 Windows Vista 的 UAC 提示功能

===================引 用 hughes0201 文 章===================
感謝大大~~~可以了~~
方便再請問一個問題嗎?程式是被UAC鎖住,那上面的內容是大大你是用什麼原理來解決的呢?
照上面的做法可以解決,只是我不太懂這個原理~~><,比較好奇~~


------
價值的展現,來自於你用哪一個角度來看待它!!
hughes0201
一般會員


發表:12
回覆:10
積分:9
註冊:2008-11-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-09-14 13:18:01 IP:61.31.xxx.xxx 訂閱
謝謝~~~ 研讀中~~
系統時間:2017-10-18 19:16:19
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!