摘要:局域網系統涉及了網絡通訊技術,包括傳輸控制協議(TCP) 和用戶數據包協議(UDP)的應用,該文對其進行了簡要的分析和研究,并在此基礎上給出使用Delphi和socket函數的方法。利用Delphi 的TServerSocket,TclientSocket 構件實現局域網內基于 TCP/IP 的通信,文章最后給出了編程界面和程序演示界面,在局域網環境下展示了程序的運行。
關鍵詞:網絡編程;TCP;IP地址;UDP;Delphi
中圖分類號:TP391 文獻標識碼:A 文章編號:1009-3044(2009)05-1239-03
Pear-to-Pear Communication Programme Using Delphi
ZHANG Yan
(The Power Supply Bureau of Baotou, Baotou 014030,China)
Abstract: This paper discusses the network communication technology related to LAN including the application of TCP/IP,as well as acquisition of IP address by means of Winsock2.A program for network transmission based on TCP/IP by using TserverSocket,TclientSocket in Delphi is demonstrated. The program works well.
Key words: web programme; TCP;IP address;delphi
1 引言
Delphi具有如下的優點:可視化開發環境的性能;編譯器高速度和已編譯代碼的高效率;編程語言的功能強大,復雜性低;數據庫結構的靈活,可擴展性強;框架對設計和使用模式的擴充支持。應用delphi可以很容易地在完成一個C/S結構的局域網系統的設計和實現。這通常涉及到圖形用戶界面設計、TCP/IP協議、UDP 數據廣播、局域網內文件傳輸等一系列技術。本文通過一個簡單示例程序,展示了在Del2phi 語言中進行UDP 數據廣播及利用Delphi的TServerSocket 、TClientSocket 構件實現局域網內基于TCP/IP 通信的一般步驟和方法。
2 TCP/IP/UDP協議
傳輸控制協議TCP (Transmission Control Protocol) 是Internet 最基本的網絡通信協議,它由一系列協議組成,下面分別概括介紹TCP/IP協議族中的各協議 。
IP協議是TCP/IP協議族中最為核心的協議。所有的TCP、UDP、ICMP及IGMP數據都以IP數據報格式傳輸。IP協議提供的是不可靠無連接的數據報傳送服務,它只提供最好的傳輸服務,但不保證IP數據報能成功的達到目的地。IP層也可配置成路由器,路由器比主機多了數據報轉發的功能即對于目的地址為非本機地址的數據報進行轉發。
TCP是屬于傳輸層的協議,向應用層提供一種面向連接的、可靠的字節流服務。面向連接意味著兩個使用TCP的應用(通常為一個客戶和一個服務器)在彼此交換數據之前必須先建立一個TCP連接。因此在一個TCP連接中,僅有兩方進行彼此通信,沒有廣播和多播的概念。TCP某些方式來提供數據傳輸的可靠性。
UDP是一個簡單的面向數據報的傳輸層協議,它只提供不可靠性的數據傳輸服務把:應用程序傳給IP層的數據發送出去,但并不保證它們能到達目的地。這意味著UDP客戶機向指定的遠端主機發送數據報時,并未事先確知對方是做好了接收數據的準備的。因此就會發生某一客戶機發給一個主機,而此主機事先并未把此客戶機列入其目標端口號而加以監聽的情況。TCP的校驗和是必需的,而UDP的校驗和是可選的。當校驗和有差錯時UDP就將數據報丟棄并不產生任何差錯報文。
綜合三種協議,如果通訊強調可靠性,應該使用TCP;如果可靠性要求不高,但實時性要求高時可以應用UDP協議。本文這里應用TCP/IP協議作為通信協議,可以保證很強的可靠性。
3 socket編程
3.1 soket簡介
在Windows 環境下開發網絡應用程序,通常都是使用Microsoft的網絡編程接口,即Windows套接字WindowsSocket( 簡稱Winsock), 它包含在Winsock.dll 中的一組API 中,用于在網絡上傳輸數據和交換信息,編程人員需要熟悉和掌握相關的網絡協議、系統的底層知識以及網絡軟硬件技術,因而Winsock 編程相當復雜。所幸的是, Delphi對WinSock進行了有效的封裝,并不需要直接與Winsock 的API 打交道,只需使用其NMUDP、TClientSocket 和TServerSocket等構件,使得對Winsock 的訪問大大簡化。本文通過利用Delphi的TServerSocket、TClientSocket構件實現了局域網內基于TCP/IP的通信。
抽象地說,Socket 是一種雙向通信接口;實際上,Socket 是一種數據結構,用以創建一條在沒有互聯的進程間發送、接受消息的通道(連接點) 。一對互聯的Socket 提供通信接口,使兩端可以傳輸數據。Socket 屏蔽了底層通信軟件和具體操作系統的差異,使得任何兩臺安裝了TCP 協議軟件和實現了Socket 規范的計算機之間的通信成為可能。Socket 接口是TCP/ IP 網絡最為通用的API,也是在Internet 上進行應用開發最為通用的API。
3.2主要的代碼實現
在程序界面中,使SeverSocket控件和ClientSocket控件。SeverSocket控件是基于TCP/IP協議傳輸的服務器方的控件,它的主要作用是用來監聽其它基于TCP/IP傳輸計算機的連接請求,并在收到連接請求時。建立連接,進行數據傳輸,ClientSocket控件是基于TCP/IP傳輸的客戶方的控件,它的主要作用是監聽TCP/IP傳輸的服務器發出連接請求,在收到服務器的允許連接的響應后,建立連接,并傳輸數據,之所以在窗體中同時創建ServerSocket和ClientSocket控件,是因為應用程序既可作為服務器,又可作為客戶端使用。
1) Serversocket和ClientSocket之間的連接
procedure TForm2.shezhiClick(Sender: TObject);
begin
form1.TcpClient1.Active:=1;
form1.TcpClient1.RemoteHost:=edit1.Text;
form1.TcpClient1.RemotePort:=edit2.Text;
form1.TcpClient1.Active:=true;
form1.TcpServer1.Active:=1;
form1.TcpServer1.LocalHost:=edit3.Text;
form1.TcpServer1.LocalPort:=edit4.Text;
form1.TcpServer1.Active:=true;
form1.Button3.Enabled:=true;
edit1.Text:='192.168.0.220';
edit2.text:='8000';
end;
2) 消息的輸入
procedure TForm3.Button1Click(Sender: TObject);
begin
form1.TcpClient1.RemoteHost:=form2.edit1.Text;
form1.TcpClient1.RemotePort:=form2.edit2.Text;
form1.tcpclient1.Connect;
if form1.tcpclient1.Connected then
begin
form1.tcpclient1.Sendln(edit1.Text);
end;
form1.memo2.Lines.Add(edit1.Text);
edit1.Text:='';
form1.tcpclient1.Disconnect;
close();
end;
3) 服務器端的監聽
procedure TForm1.TcpServer1Accept(Sender: TObject; ClientSocket: TCustomIpClient);
var s:string;
begin
s:=clientsocket.Receiveln;
if s='do you receive?' then shaniu(s);
if s='received' thenform6.ShowModal;
if s<>'' then
memo1.Lines.Add(clientSocket.RemoteHost);
{ while s<>'' do
if s='
' then
memo1.Lines.Add('');
}
memo1.Lines.Add(s);
s:=clientsocket.Receiveln;
end;
4) 斷開鏈接
procedure TForm1.breakClick(Sender: TObject);
begin
if messagedlg('是否斷開連接?',mtinformation,[mbyes,mbNo,mbcancel],0)=mryes
then begin
tcpclient1.Active:=1;
tcpserver1.Active:=1;
button3.Enabled:=1;
end;
end;
4 程序演示
如圖2所示,這是程序運行的主界面。在兩臺計算機各打開一個程序的實例,通過設置好ip和端口以后,就可以進行通信了。通訊可以在廣域網內進行,也可以在局域網內進行,但要保證計算機支持TCP/IP協議,這可以通過設置計算機實現。
5 結束語
通過編程,實現了Delphi下的網絡編程。這極大的增強了對TCP/IP協議的理解,認識了套接字的編程的思想。通過運用Delphi編程,可以使我們認識到Delphi本身就是一個功能十分強大的面向對象開發平臺。本文開發的程序可以用作局域網聊天的工具,或者用于廣域網的通信。可以看出,本文編制的程序代碼簡單,程序占用內存極少,對于數字信息的通信有很大的好處,本文的代碼還可以嵌入高級的應用中來,使得本程序作為其它應用的一部分,有很強的實際意義。
參考文獻:
[1] 黃文蘭.Delphi 語言開發教務管理系統[J].電腦知識與技術,2006,(20).
[2] 向繼文.Delphi 與匯編語言的混合編程[J].吉林大學學報(自然科學版),2006,(3).
[3] 林瑜華.如何在DELPHI 中使用SQL 語言[J].福建電腦,2005,(10).
[4] 嚴麗平.基于Delphi 的C語言詞法分析器的實現[J].科技廣場,2004,(8).
[5] 王忠,遲忠先.Delphi5開發指南[M].北京:電子工業出版社,2000:28-30.
[6] Craig Zacker.TCP/IPAdministration[M].北京:中國水利出版社,1998:620-625.