金笛工业手机论坛  

返回   金笛工业手机论坛 > 开发者乐园 > 短信开发资料

短信开发资料 短信开发技巧,代码分析

回复
 
LinkBack 主题工具 显示模式
旧 2009-10-09   #1 (permalink)
高级会员
 
注册日期: 2009-07-09
住址: 亦庄经济开发区2号院大族广场1502
帖子: 531
susu8988 正向着好的方向发展
默认 用Delphi编写局域网中的聊天程序

Internet盛行的今天,网上聊天已成为一种时尚。同时,各单位已建成了自己的局域网;能否在局域网上实现聊天呢?可以,网上到处都有这种工具。当然,我们可以拥有自己版权的聊天工具。
  User Datagram Protocol (UDP)协议,是一种无连接协议。在Delphi中利用这种协议,可以轻松的编写出聊天程序,以下的程序,在Delphi 5+Pwin98中通过。

  打开Delphi,新建Application,放置以下几个控件:Panel1、Panel2,其属性如下:

  FORM1.caption:=聊天工具

  panel1.align:=albottom

  panel2.align:=alclient

  然后,放置以下控件:Edit1,ListBox1,Memo1,Button1,Button2,BitBtn1, Nmudp1其主要控件的属性如下:

  nmudp1.localport:=8888(可自定义)

  nmudp1.remoteport:=8888(与localport相同)

  源程序如下:

  unit main;
   interface
   uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
   StdCtrls, Buttons, ExtCtrls, NMUDP, Menus, ComCtrls,WinSock; file://增加WinSock
   type
   TForm1 = class(TForm)
   NMUDP1: TNMUDP;
   Panel1: TPanel;
   Panel2: TPanel;
   Label1: TLabel;
   Edit1: TEdit;
   BitBtn1: TBitBtn;
   Memo1: TMemo;
   Panel3: TPanel;
   Panel4: TPanel;
   ListBox1: TListBox;
   Button1: TButton;
   Button2: TButton;
   procedure FormShow(Sender: TObject);
   procedure BitBtn1Click(Sender: TObject);
   procedure NMUDP1DataReceived(Sender: TComponent; NumberBytes: Integer;
                  FromIP: String; Port: Integer);
   procedure Edit1KeyPress(Sender: TObject; var Key: Char);
   procedure Button1Click(Sender: TObject);
   procedure Button2Click(Sender: TObject);
   private
    { Private declarations }
   public
    { Public declarations }
   end;
   var
   Form1: TForm1;
   ComputerName: array[0..127] of Char;
   implementation
   {$R *.DFM}
   procedure TForm1.FormShow(Sender: TObject);
   var
    sz: dword;
   begin
    sz := SizeOf(Computername);
    GetComputerName(ComputerName, sz);//得到本机的标识
    ListBox1.Items.Clear;
    ListBox1.Items.Add(大家);//在网友清单中,增加"大家"和
    ListBox1.Items.Add(ComputerName);//本机名称
    ListBox1.ItemIndex:=0;
   end;
   procedure TForm1.BitBtn1Click(Sender: TObject);
   var
    MyStream: TMemoryStream;
    TmpStr: String;
    i:integer;
   Begin
    if Edit1.Text<> then file://如果所说的内容不为空,则发送。
     begin
      NMUDP1.ReportLevel := Status_Basic;
      NMUDP1.RemotePort :=8888;//端口为:8888,可以自己定义,但必须与LocalPort相一致。
      if ListBox1.Items[ListBox1.ItemIndex]=ComputerName then
       Edit1.Text:=ComputerName+自言自语道:+Edit1.Text file://如果和自己对话.
      Else
       Edit1.Text:=ComputerName+对+ListBox1.Items[listbox1.itemindex]+说:+Edit1.Text;
       TmpStr :=Edit1.text;
       MyStream := TMemoryStream.Create;
       try
       MyStream.Write(TmpStr[1], Length(Edit1.Text));
       if ListBox1.ItemIndex=0 then
        begin
        for i:=1 to ListBox1.Items.Count-1 do file://如果选择"大家",则对所有的网友发送信息
          begin
            NMUDP1.RemoteHost :=ListBox1.Items[i];//远程主机的名称或地址.
            NMUDP1.SendStream(MyStream);//发送信息.
         End;
       end
       else 如果私聊
        begin
         NMUDP1.RemoteHost :=ListBox1.Items[ListBox1.itemindex]; file://仅对所选中的网友.
         NMUDP1.SendStream(MyStream);
        End;
       finally
       MyStream.Free;
      end;
      Edit1.Text:=;
      Edit1.SetFocus;
     end else
     Edit1.SetFocus;
     end;
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
     NumberBytes: Integer; FromIP: String; Port: Integer);
     var
      MyStream: TMemoryStream;
      TmpStr: String;
     begin
      MyStream := TMemoryStream.Create;
      try
      NMUDP1.ReadStream(MyStream);
      SetLength(TmpStr,NumberBytes);
      MyStream.Read(TmpStr[1],NumberBytes);
      Memo1.Lines.Add(TmpStr); file://显示对话的内容.
      finally
      MyStream.Free;
      end;
     end;
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    var
     MyStream: TMemoryStream;
     TmpStr: String;
     i:integer;
    Begin
     if (key=#13) and (Edit1.Text<>) then file://如果所说的内容不为空,且最后一个按键为"Enter",则发送。
      begin
       NMUDP1.ReportLevel := Status_Basic;
       NMUDP1.RemotePort :=8888;
       if ListBox1.Items[ListBox1.ItemIndex]=ComputerName then
         Edit1.Text:=ComputerName+自言自语道:+Edit1.Text
       else
         Edit1.Text:=ComputerName+对+ListBox1.Items[listbox1.itemindex]+说:+Edit1.Text;
         TmpStr :=Edit1.text;
         MyStream := TMemoryStream.Create;
         try
          MyStream.Write(TmpStr[1], Length(Edit1.Text));
          if ListBox1.ItemIndex=0 then
           begin
            for i:=1 to ListBox1.Items.Count-1 do
             begin
              NMUDP1.RemoteHost :=ListBox1.Items[i];
              NMUDP1.SendStream(MyStream);
             end;
           end
           else
            begin
             NMUDP1.RemoteHost :=ListBox1.Items[ListBox1.itemindex];
             NMUDP1.SendStream(MyStream);
            end;
            finally
            MyStream.Free;
            end;
            Edit1.Text:=;
            edit1.SetFocus;
           end else
            Edit1.SetFocus;
           end;
     procedure TForm1.Button1Click(Sender: TObject);
     var
      InputString:String;
      begin file://增加网友,输入的可以是IP地址或计算机名称。
      InputString:=InputBox(增加人员, IP地址或计算机名, );
      if Inputstring<> then ListBox1.Items.Add(Inputstring);
       ListBox1.ItemIndex:=0;
      end;
   procedure TForm1.Button2Click(Sender: TObject);
    begin file://删除当前选中的网友,但"大家"不能被删除.
     if ListBox1.ItemIndex<>0 then ListBox1.Items.Delete(ListBox1.ItemIndex);
    end;

end. 这样,一个简单的聊天工具就做好了,只要双方同时运行本程序,且将对方的计算机名称或IP地址加入到网友中即可实现实时聊天了,一个属于自己版权的聊天程序,就这样编写成功了。当然,你可以增加更多的内容,使程序更加的完善,以求更多的功能。
__________________
地址:北京亦庄经济技术开发区荣华南路10号院5号楼705

电话:010-82356575/76/77转6070 联系人:苏秋英

手机微信同号:13811870548 QQ: 1170923055
susu8988 当前在线   回复时引用此帖
回复

书签


当前查看此主题的会员: 1 (0 位会员和 1 位游客)
 

发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 启用
Pingbacks are 启用
Refbacks are 启用



所有时间均为北京时间。现在的时间是 00:50


Powered by vBulletin® 版本 3.8.3
版权所有 ©2000 - 2024,Jelsoft Enterprises Ltd.