【DELPHI设计栏目提醒】:网学会员DELPHI设计为您提供基于局域网的文件传输系统Delphi+Socket参考,解决您在基于局域网的文件传输系统Delphi+Socket学习中工作中的难题,参考学习。
•采用TCP/IP详解的原因:
第一,局域网内主机之间的是依靠IP地址进行标识。本设计要实现文件及文件夹的传输就需要以IP地址为传送基础进行;
第二,新用户上线后需要向局域网内所有用户广播自己的主机信息使网内主机得到本机的IP地址等。需要用到与TCP/IP相对的UDP协议。
2.2 C/S架构的DELPHI程序设计技术
本系统的开发主要采用C/S结构。所谓C/S (Client/Server)结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将信息交互任务合理分配到Client端和Server端来实现,降低了系统文件传输过程中的开销。目前大多数应用软件系统都是Client/Server形式的两层结构。传统的C/S体系结构虽然采用的是开放模式,但这只是系统开发一级的开放性,在特定〖本文来自:骆驼论文网 http://www.myeducs.cn/ 〗的应用中无论是Client端还是Server端都还需要特定的软件支持。由于没能提供用户真正期望的开放环境,C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,加之产品的更新换代十分快,已经很难适应百台电脑以上局域网用户同时使用。
用程序开发工具,如Borland公司的资源编辑器(Resourse Workshop)。DELPHI是可视化应用编程开发环境,可重用性面向对象编程语言,快速编译器能够有效快速建立WINDOWS应用程序,快速简化WINDOWS与浏览器客户,WEB服务器以及中间件等开发之外,同时也支持基于WEB服务的Microsoft,.net, Sun one体系,而且提供给WEB开发者需要的可伸缩性和可靠性。用户可以开发支持WEB服务特性的服务器端和客户端应用,而这一切都是通过一套高度集成的可视化开发工具,先进的编译技术和可重用的组件完成。
2.3 SOCKET网络程序设计技术
文件传输系统得以实现的根本在于建立有效的连接以及是否存在文件传输载体。所谓Socket通常也称作"套接字",用于描述IP地址和端口,socket类表现了客户端套接字,它是属于两台计算机的两个TCP通讯端口之间的通讯通道。在网络编程中,客户端使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不
界面是系统功能得以实现的基本平台,这里充分利用Delphi可视化开发环境以各种组件设置。界面的设计可以分为五步:
1)创建一个工程,制作一个窗体form1;
2)在form1内加入用户列表userlist并设置列表项:用户名,工作组,IP地址以及它们的属性;
3)在form1内加入Memo1;
4)在Memo1内加入各种DELPHI网络通讯控件,本系统用到的控件分别有:
a. 用于传送文件是打开文件的控件OpenDialog1;
b. 用于接收端保存文件的控件SaveDialog1;
c. 用于点到点文件传输的客户端PClientConnected及服务器端PServerAfterCommandHandler;
d. 用于广播主机信息的客户端ClientStatus和服务器端ServerStatus数据报组件;
e. 用于设置退出系统和窗口前端显示的PopupMenu1菜单;
5)分别创建刷新按钮BitBtn1,文件传输BitBtn2以及文件夹传输BitBtn3按钮。
设置的界面如下图:
procedure TForm1.FormCreate(Sender: TObject); //新用户上线 以LOGIN为头信息
var wsadata:twsadata;
myinfobuf:array[0..1023]of char; //本机信息
pmyname:array[0..1023]of char; //本机名
wList,clist: TStringList ;
i,j:integer;
begin
mainhide; //把程序图标显示在系统托盘里边
if wsastartup($101,wsadata)<>0 then exit; //获取本机名
gethostname(pmyname,sizeof(pmyname)); //获取主机名
myname:=strpas(pmyname);//得到主机名
try
wlist:=tstringlist.Create;
clist:=tstringlist.Create;
GetServerList(wList); //获取本机IP
for i:=0 to wlist.Count-1 do
begin
getusers(wlist.Strings[i],clist);//得到用户名
for j:=0 to clist.Count-1 do
begin
if (clist.Strings[j]=uppercase(myname)) or (clist.Strings[j]=myname) then
begin myworkgroup:=wlist.Strings[i]; //获本机工作组
end;
finally
wlist.Free; clist.Free;
end;
myinfo:=format(''%-6s%-255s%-255s'',[''LOGIN'',myname,myworkgroup]);
strpcopy(myinfobuf,myinfo);
client.Broadcast(myinfobuf,9000); end;
function tform1.handdata(ip,name,workgroup:string;port:integer):string; //向好友发握手信息
var minfobuf:array[0..1023]of char; minfo:string;
begin
minfo:=format(''%-6s%-255s%-255s'',[''HAND'',name,workgroup]);
strpcopy(minfobuf,minfo);
server.SendBuffer(ip,port,minfobuf,sizeof(minfobuf));
end;
procedure TForm1.N10Click(Sender: TObject); //用户离线 以LOGINOUT为头信息
var mylogoutbuf:array[0..1023]of char; mylogoutinfo:string;
begin
mylogoutinfo:=format(''%-6s%-255s'',[''LOGOUT'',myname]);
strpcopy(m〖本文来自:骆驼论文网 http://www.myeducs.cn/ 〗ylogoutbuf,mylogoutinfo);
client.Broadcast(mylogoutbuf,9000); // 广播自己离线信息
Application.Terminate; //销毁线程
end;
参考文献
[1]Andrew S.Tanenbaum[英].计算机网络.[M]北京:清华大学出版社,1998。
[2]Douglas E.Comer[美].TCP/IP详解[M].北京:清华大学出版社,1998。
[3]鲍敏,吴昊.Delphi 网络高级编程[M]. 北京:人民邮电出版,2001。
[4]肖建.Delphi6编程基础[M].北京:清华大学出版社,2002。
[5]施新刚.Delphi实效编程百例[M]. 北京:人民邮电出版社,2002。
[6]W.Richard Stevens[美].TCP/IP详解 卷1:协议[M].北京:机械工业出版社,2000。
[7]飞思科技产品研发中心.Delphi高级编程6[M].北京:电子工业出版社,2000。
上一篇:商品交易管理系统Delphi+access