WinSock是一組API用於在網絡上傳輸數據和交換信息雖然現在有很多工具如FTP程序可以在網絡上傳輸數據和文件但是通過WinSock編程有更大的靈活性它不需要關心網絡連接的細節然而用WinSock編程卻很復雜但是在Delphi中我們並不需要直接與WinSock的API打交道因為TClientSocket元件和TServerSocket元件(Internet頁)封裝了WinSock的大部分API使得對WinSock的訪問大大簡化下面這個遠程控制的例子就很清楚地說明了這個問題它可以發送一個消息給對方並能夠使對方的電腦關閉重新啟動或重新登錄
一實現原理
實行遠程控制實際上就是一個服務器程序(以下簡稱被控程序)和一個客戶程序(以下簡稱主控程序)被控方即為服務器程序它監聽客戶的請求並作出處理主控方即為客戶程序它連接上服務器後發出自己的請求服務器便根據自已的請求進行不同的響應
二編寫主控程序
新建一個項目Clientdpr並把一個TClientSocket元件放到Form上它的屬性設置如下Port設為(端口號可任意設置只要求雙方統一)其它屬性按默認值在窗體上添加兩個TEditEdit用來輸入發送的字符Edit用來輸入IP地址添加兩個TButtonButton點擊後用來連接被控機Button點擊後用來發送字符然後聲明一個私有變量ConnectFlag表示雙方是否連接好
private
ConnectFlag:Boolean;
ClientSocket的OnConnect事件代碼如下
procedure TFormClientSocketConnect
(Sender: TObject;Socket: TCustomWinSocket);
begin
ConnectFlag:=True; //表示連接成功
end;
ClientSocket的OnError事件代碼如下
procedure TFormClientSocketError(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent:
TErrorEvent;var ErrorCode: Integer);
begin
ApplicationMessageBox(PChar( 不能連接到IP地址
: + EditText++
#+可能是監聽程序沒有運行或網絡故障!)
連接錯誤MB_OK+MB_ICONSTOP);
ErrorCode := ;
end;
Button的OnClick事件代碼如下
procedure TFormButtonClick(Sender: TObject);
begin
with ClientSocket do begin
if Active then begin
Active := False;//在連接之前首先關閉
ConnectFlag:=False; //置連接標志為假
end;
if Length(EditText) > then begin
Host := EditText; //指定IP地址或主機名
Active := True;
end;
end;
end;
Button的OnClick事件代碼如下
procedure TFormButtonClick(Sender: TObject);
begin
if ConnectFlag then
ClientSocketSocketSendText(EditText)
//如果連接成功則發送字符串
else
ApplicationMessageBox(PChar( 沒有連接到地址 :
+ EditText++
#+檢查IP地址是否存在或是否已經連接!)
提示信息MB_OK+MB_ICONSTOP);
end;
三編寫被控程序
新建一個項目Serverdpr並把一個TServerSocket元件放到Form上
它的屬性設置如下Active設為TruePort設為其它屬性按默認值
ServerSocket的OnClientRead事件代碼如下
procedure TFormServerSocketClientRead
(Sender: TObject;Socket: TCustomWinSocket);
var
Str:PChar;
CodeV:Integer;
begin
Str:=PChar(SocketReceiveText); //接收字符串
Val(StrVCode); //處理接收的字符串首先轉換字符串為整數
if Code< > then
ApplicationMessageBox(Str提示信息
MB_OK+MB_ICONINFORMATION)
//如果轉換後的數據不是一個整型數就通過消息框來顯示字符串
else
if (V=)or(V=)or(V=) then
ExitWindowsEx(V)
//調用Windows的API函數(V=表示重新登錄
V=表示關機V=表示重啟動)
else
ApplicationMessageBox(Str提示信息
MB_OK+MB_ICONINFORMATION);
//轉換後數據不為時在消息框內顯示字符串
end;
修改項目文件不讓窗口顯示並且防止它運行兩次修改begin和end之間的代碼如下
begin
ApplicationInitialize;
if FindWindow(TFormForm)= then begin
//當沒有找到Form時執行下面代碼
ApplicationShowMainForm:=False; //不顯示主窗口
ApplicationCreateForm(TForm Form);
ApplicationRun;
end;
end
四注意事項
網絡要裝配正確並安裝TCP/IP協議且要正常運行
首先要運行被控程序
必須知道對方的IP地址或主機名
不過要注意的是此程序可以遠程控制對方的計算機請慎用如果出現問題筆者概不負責
From:http://tw.wingwit.com/Article/program/Delphi/201311/25083.html