当前位置:首页 > 免费毕业设计

ASP.NET基于局域网的信息收发系统的设计与实现(源代码+论文)免费下载

ASP.NET基于局域网的信息收发系统的设计与实现(源代码+论文)免费下载

  • 网站价格: 1
  • 特殊技术: ASP.NET
  • 作品类型: 免费毕业设计
  • 售后服务:

联系方式: 微信:biyebang QQ: 629001810

作品详情

 

摘要

网络通讯在当今已经不算新鲜事物,但大多数网络通讯都需要借助Internet上的服务器,这就给那些具有大规模内部网络的用户造成了许多问题,如浪费网络资源、遭遇到网络攻击、传播的病毒、破坏防御系统等等。由于互连网上的网络通讯工具给企业内部信息交流带来了不便,所以为了方便内部网络的用户之间的沟通,需要开发一个基于局域网的信息收发系统的即时通讯工具,实现在内部网络中进行信息的交流。本课题设计主要针对局域网通讯而开发设计的,采用的是C/S构架,利用Delphi编程工具来实现单播、广播以及在线用户显示和查看历史记录的功能,并借助一些网络通讯组件,成功的实现了在局域网上的即时通讯。本论文共分为六部分。第一部分是课题的背景及研究意义;第二部分是所运用的理论基础知识;第三部分是本系统的需求分析;第四部分是系统结构和模块设计;第五部是实施和测试情况;最后是本设计的结论总结及部分参考文献。

 


关键词: 
即时通讯;C/S构架;单播;广播;历史记录 


目录:

免费毕业设计



系统设计:

1.1 系统总体架构

本系统主要是采用C/S结构,并且每个客户端也是作为服务器端的,当系统发送信息给局域网的用户,主要由单播模块和广播模块来实现,而其中的单播模块和用户信息模块是具有依赖性的,在接收信息的时候又有两个模块来完成,一是信息接收的模块,另一个是信息查看的模块。
由此可以看出本系统主要分为两大部分模块:发送模块和接收模块。发送模块:单播模块,广播模块,用户信息模块,信息记录模块接收模块:接收信息模块,查看信息模块
有了以上的了解了那让我们来看看系统的架构图:

 

免费毕业设计

系统架构图

 

1.3 系统功能模块设计

4.3.1 网络组件

UDP协议由TCP协议衍生而来。TCP用于确保点对点的连接,而UDP并不保证发送的数据一定到达,也不表明数据报的传输成功或失败。
本系统设计使用的是TIdUDPClient和TIdUDPServer两个用户数据报(UDP)组件,首先创建Delphi工程。然后向工程组再添加一个工程。把一个工程作为客户,另一个作为服务器。为连接到UDP服务器,需要一个TIdUDPClient组件。用来表示服务器的IP地址和端口号。由于UDP是无连接的,因此在UDP的接口方法中不包括Connect方法。要使用Internet Direct实现的组件,只需使用Send向给定的IP地址和端口号广播一个命令字符串。
其中我为IP地址和端口号的设置分别为127.0.0.1和9000。服务器是作为应用程序实现的,它对客户程序发出的一个简单的命令集进行响应。为实现服务器,程序将监听DefaultPort端口上的广播,并将TIdUDPServer.Active设置为True。
下面是我对TIdUDPClient和TIdUDPServer组件的设置图:
 
免费毕业设计
图9 TIdUDPClient组件设置
 
免费毕业设计
图10 TIdUDPServer组件设置
 

4.3.2 用户信息显示功能

为了方便用户选取单个用户进行信息发送和查看在线用户的信息,所以设计了一个ListView来进行显示如图5,在ListView中包括了用户名、工作组、IP地址。当有用户打开本系统的时候将会向局域网中的所有用户发送一个握手信息来获取网络中的在线用户信息并添加到列表中显示出来,同时也把自己的网络资源信息发送给对方,使自己被添加到其他用户的列表中。
其中分别要对网络中的所有的用户名、工作组、IP地址进行获取,下面来看一下对于获取这些网络资源的代码部分。
1) 用户名获取代码如下:

Function tform1.GetUsers( GroupName : string;List : TStringList) : Boolean;

type TNetResourceArray = ^TNetResource;         //网络类型的数组

Var

NetResource: TNetResource;  Buf: Pointer; Count,BufSize,Res: DWord;

lphEnum: THandle; Ind: Integer; Temp: TNetResourceArray; TmpStr:String;

Begin

 Result := False;

FillChar(NetResource, SizeOf(NetResource), 0);          //初始化网络层次信息

NetResource.lpRemoteName := @GroupName[1];              //指定工作组名称

NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;//类型为服务器(工作组)

NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;         //已连接机器

NetResource.dwScope := RESOURCETYPE_DISK;               //列举文件资源信息

 

//获取指定工作组的网络资源句柄

 Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,

 RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);

 

 If Res <> NO_ERROR then Exit; //执行失败

 While True Do//列举指定工作组的网络资源

 

Begin

 Count := $FFFFFFFF;           //不限资源数目

 BufSize := 8192;             //缓冲区大小设置为8K

 GetMem(Buf, BufSize);        //申请内存,用于获取工作组信息

 

//获取计算机名称

Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);

 

 If Res = ERROR_NO_MORE_ITEMS then break;   //资源列举完毕

   If (Res <> NO_ERROR) then Exit;          //执行失败

   Temp := TNetResourceArray(Buf);

   For Ind := 0 to Count - 1 do            //列举工作组的计算机名称

 

Begin

//获取工作组的计算机名称

    tmpStr:=Temp.lpRemoteName;

Delete(tmpstr,1,2);

Form1.ListBox1.Items.Add(tmpStr);

list.Add(tmpstr);

Inc(Temp);

  end;

end;

 

 Res := WNetCloseEnum(lphEnum);//关闭一次列举

 If Res <> NO_ERROR then exit;//执行失败

Result := True;

FreeMem(Buf);

end;

2) 工作组获取代码如下:

var //显示所有工作组的名称

NetResource : TNetResource;

Buf : Pointer;

Count,BufSize,Res : DWORD;   //一个无符号的,占四个字节(32)的整型//句柄类型

lphEnum : THandle;  

p : TNetResourceArray;i,j : SmallInt;

NetworkTypeList : TList;  //返回局域网中的工作组名称

 

…………

//列出一个网络类型中的所有工作组名称

begin

NetResource := TNetResource(NetworkTypeList.Items[J]^);//网络类型信息

//获取某个网络类型的文件资源的句柄,NetResource为网络类型信息,lphEnum为返回名柄

Res:=WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);

if Res <> NO_ERROR then break;//执行失败

while true do//列举一个网络类型的所有工作组的信息

begin

Count := $FFFFFFFF;             //不限资源数目

BufSize := 8192;                //缓冲区大小设置为8K

GetMem(Buf, BufSize);           //申请内存,用于获取工作组信息

 

//获取一个网络类型的文件资源信息

Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);

if ( Res = ERROR_NO_MORE_ITEMS ) //资源列举完毕

or (Res <> NO_ERROR) //执行失败 

then break;

P := TNetResourceArray(Buf);

for I := 0 to Count - 1 do  //列举各个工作组的信息

begin

List.Add( StrPAS( P^.lpRemoteName ));//取得一个工作组的名称

Inc(P);

end

end;

 

Res := WNetCloseEnum(lphEnum);   //关闭一次列举

if Res <> NO_ERROR then break;   //执行失败

end;

Result := True;

FreeMem(Buf);

NetworkTypeList.Destroy;

end; 

3) IP地址获取代码如下:

procedure TForm1.ServerUDPRead(Sender: TObject; AData: TStream;ABinding: TIdSocketHandle);

var

readbuf:array[0..2030]of char;

msg,head,recvip,recvname,recvworkgroup,recvmsg,memo:string

recvport:integer;

f:textfile;

 

begin

ZeroMemory(@readbuf[0],2030);

adata.Read(readbuf,sizeof(readbuf));

msg:=Trim(String(Pchar(@Readbuf[0])));

 

//memo1.Lines.Add(msg);

head:=trim(copy(msg,1,headlen));

 

//添加对方IP  1.返回对方IP 2. 发出Hand握手信息

if head='LOGIN' then 

 

begin

recvip:=abinding.PeerIP;

recvport:=9000;

 

// memo1.Lines.Add('login recv'+recvip+inttostr(recvport));

 

recvname:=copy(msg,headlen+1,namelen);

recvworkgroup:=copy(msg,headlen+namelen+1,length(msg));

adduser(recvname,recvworkgroup,recvip,recvport);

handdata(recvip,myname,myworkgroup,recvport);

end;

 

//添加对方返回的自己的ip (对比)

if head='REVLOG'then       

 

begin

 

//  memo1.Lines.Add('revlog recv');

 

RECVPORT:=strtoint(copy(msg,headlen+1,portlen));

recvip:=copy(msg,headlen+portlen+1,iplen);

recvlog(recvip,recvport);

end;





系统页面展示:


免费毕业设计

免费毕业设计

免费毕业设计

 

帮我毕业网微信

版权所有© 帮我毕业网 并保留所有权利

QQ 1370405256 微信 biyebang

QQ:629001810微信:biyebang

收缩