RSS
热门关键字:  数据挖掘  人工智能  数据仓库  搜索引擎  数据挖掘导论
当前位置 :| 首页>电脑常识>即时通讯>

局域网及时通讯程序的原代码

来源: 作者:互联网作品 时间:2007-04-21 点击:

使用TCP/IP协议实现聊天程序    
   
  TCP/IP协议的传输即面向点到点的传输方式!    
   
  1.创建应用程序。    
   
  选择“NEW”菜单下的“Application”选项,创建一个普通的应用程序。    
   
  2.创建所需控件。    
   
  首先在控件栏的Win32页中选择ImageList控件和CoolBar控件,再从Win32栏选择ToolBar控件放置到CoolBar    
   
  控件上。用鼠标右键单击“ImageList”控件,在弹出的菜单中选择“ImageList   Editer...”选项,弹出    
   
  “ImageList   Editer”对话框,单击“Add...”按钮,选择5幅位图。在对象管理器Object   Inspector中将    
   
  ToolBar控件的Image属性设为“ImageList1”,用鼠标右键单击“ToolBar”控件,选“New   Button”选项,     数据挖掘研究院
   
  总共创建5个ToolButton,在   对象管理器中将5个ToolButton的ImageIndex属性分别设置为0,1,2,3,4。    
   
  此时ImageList控件中的5幅位图将会分别显示在Toolbutton上,将5个ToolButton控件的ShowHint属性全都设    
   
  置为“ture”,并将它们的Hint属性分别设置为“监听”、“连接”、“断开连接”、“更改你的昵称”和    
   
  “退出聊天程序”。    
   
  然后在窗体中放置一个Edit控件、Memo控件、StatusBar控件和一个Label控件。将Label控件的Caption属性    
   
  设置为“输入框”。    
   
  最后,也是最关键的,在控件栏的Internet页中选择SeverSocket控件和ClientSocket控件放置在窗体中,将    
   
  SeverSocket控件和ClientSocket控件的Port属性设置为“1100”。SeverSocket控件是基于TCP/IP协议传输    
   
  的服务器方的控件,它的主要作用是用来监听其它基于TCP/IP传输计算机的连接请求,并在收到连接请求时    
   
  建立连接,进行数据传输,ClientSocket控件是基于TCP/IP传输的客户方的控件,它的主要作用是向监听    
   
  TCP/IP传输的服务器发出连接请求,在收到服务器的允许连接的响应后,建立连接,并传输数据,之所以在    
   
  窗体中同时创建ServerSocket和ClientSocket控件,是因为应用程序既可作为服务器,又可作为客户端使用。    
   
  3.Serversocket和ClientSocket之间的连接    
   
  首先设置两个全局变量:    
   
  NickName:string;    
   
  b_Client:boolean;    
   
  其中NickName用于放聊天人的名称,b_Client用于表明应用程序是否作为客户端进行数据传输。    
   
  在窗体Form1的Oncreate事件中初始化变量,代码如下:    
   
  procedure   TForm1.FormCreate(Sender:TObject);    
   
  begin    
   
  NickName:+="我的昵称";    
   
  b_Client:=ture;    
   
  end;    
   
  双击ToolButton1,编写服务器监听代码如下:    
   
  procedure   TForm1.Toolbutton1Click(Sender:TObject);    
   
  begin    
   
  ClientSocket1.close;    
   
  ServerSocket1.open;    
   
  StatusBar1.SimpleText:='开始监听’;    
   
  end;    
   
  双击ToolButton2,编写客户的申请连接,代码如下:    
   
  procedure   TForm1.ToolButton2Click(Sender:TObject);     数据挖掘实验室
   
  var   s:string;    
   
  begin    
   
  if   Clientsocket1.Active   then    
   
  ClientSocket1.close;    
   
  if   InputQuery('连接到计算机','要连接的计算机名称或IP地址:',s)   then    
   
  if   Length(s)>0   then      
   
  with   ClientSocket1   do    
   
  begin    
   
  Host:=s;    
   
  open;    
   
  end;    
   
  end;    
   
  在对象管理器中,双击ClientSocket事件页的OnConnecting事件,编写处理客户等待连接请求,代码    
   
  如下:    
   
  procedure   TForm1.ClientSocket1Connecting(Sender:TObject;Socket:TCustomWinSocket);    
   
  begin    
   
  StatusBar1.SimpleText:='等待来自'+Socket.RemoteAddress+'的连接允许响应...';    
   
  end;    
   
  在对象管理器中,双击SeverSocket事件页的OnAccept事件,处理服务器响应连接事件,代码如下:    
   
  procedure   TForm1.SeverSocket1Accept(Sender:TObject;Socket:TCustomWinSocket);    
   
  begin    
   
  b_Client:=false;    
   
  StatusBar1.SimpleText:='连接到'+Socket.RemoteAddress;    
   
  end;    
   
  在对象管理器中,双击ClientSocket事件页的OnConnect事件,OnConnect事件在连接成功时被调用,代码如下:     数据挖掘实验室
   
  procedure   TForm1.ClientSocket1Connect(Sender:TObject;Socket:TCustomWinSocket);    
   
  begin    
   
  b_Client:=ture;    
   
  StatusBar1.SimpleText:='连接成功';    
   
  end;    
   
  4.ServerSocket和ClientSocket之间的数据传输    
   
  聊天的内容是通过Edit控件输入并在敲回车键后显示在Memo控件中,再传输到与之连接的计算机中。    
   
  Edit的OnKeyDown事件代码如下:    
   
  procedure   TForm1.Edit1KeyDown(Sender:TObject;var   Key:Word;Shift:TShiftState);    
   
  begin    
   
  if   Key=VK_Return   then    
   
  begin      
    数据挖掘实验室
  Memo1.Lines.Add(NickName+':'+Edit1.Text0;    
   
  if   b_Client   then    
   
  ClientSocket1.Socket.SendText(Memo1.Lines[Memo1.lines.Count-1])    
   
  else    
   
  ServerSocket1.Socket.Connections[0].SendText(Memo1.Lines[Memo1.lines.Count-1]);    
   
  end;    
   
  end;    
   
  在ServerSocket控件的onread事件中编写服务器接收到数据后的动作,代码如下:    
   
  procedure   TForm1.ServerSocket1ClientRead(Sender:TObject;Socket:TCustomWinSocket);    
   
  begin    
   
  Memo1.lines.Add(Socket.ReceiveText);    
   
  end;    
   
  在ClientSocket控件的onread事件中编写客户端接收到数据后的动作,代码如下:    

数据挖掘实验室


   
  procedure   TForm1.ClientSocket1Read(Sender:TObject;Socket:TCustomWinSocket);    
   
  begin    
   
  Memo1.lines.Add(Socket.ReceiveText);    
   
  end;    
   
  5.断开Serversocket和ClientSocket之间的连接    
   
  双击ToolButton3,编写客户端断开的处理过程,代码如下:    
   
  procedure   TForm1.ToolButton3Click(Sender:TObject);    
   
  begin    
   
  ClientSocket1.close;    
   
  StatusBar1.SimpleText:='断开连接';    
   
  end;    
   
  编写服务器响应客户端断开的处理过程,代码如下:    
   
  procedure   TForm1.ServerSocket1ClientDisconnect(Sender:TObject;Socket:TCustomWinSocket);     数据挖掘研究院
   
       
   
  begin    
   
  SeverSocket1.close;    
   
  StatusBar1.SimpleText:='断开连接';    
   
  end;    
   
  6.更改聊天者的昵称    
   
  双击Toolbutton4,编写更改昵称代码如下:    
   
  procedure   TForm1.ToolButton4Click(sender:TObject);    
   
  var    
   
  s:string;    
   
  begin    
   
  if   InputQuery('更改昵称','你的新昵称',s)   then    
   
  if   Length(s)>0   then    
   
  NickName:=s;    
   
  end;    
   
  7.退出应用程序    
   
  双击Toolbutton5,编写退出应用程序代码如下:    
   
  procedure   TForm1.ToolButton5Click(sender:TObject);    
   
  ClientSocket1.close;    
   
  ServerSocket1.close;    
   
  Form1.close;    
   
  end;    
   
  8.保存并运行应用程序    
   
  最好在网上运行该程序,如果没联网,但你的计算机支持TCP/IP协议(可以通过网络邻居安装TCP/IP协议),     
 
上一篇:没有了
下一篇:用WINSOCK实现聊天室的VC++程序设计
最新评论共有 0 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
匿名?