紧急!哪位大侠可以给我一份局域网的聊天系统?(50分)

  • 主题发起人 主题发起人 xxhsh
  • 开始时间 开始时间
X

xxhsh

Unregistered / Unconfirmed
GUEST, unregistred user!
我想作一个局域网的聊天系统?哪位大侠可以给我一份局域网的聊天系统?谢谢!
 
有一张光盘。其中有一个不错的例子。光盘的名字叫《Delphi编程资源大全》
 
那个程序bug太多,写的也很乱!!!!!!!!
 
DELPHI帮助中有一个聊天DEMO, chat目录下请参照!
自己动手丰衣足食!
 
to:xxhsh
谁说Bug多啦。我看挺好的。它分Server,client两个。支持多用户。很不错的一个例子。
你说的是那个一定是“不用服务器的局域网聊天例子”
 
是啊,DELPHI中的那个例子很好啊。
 
用Sql server ,一下子就搞定了
 
http://mantousoft.51.net/delphi_scr/scr_ip.php上有个不用服务器的聊天室系统
 
用udp广播就可以实现了
 
delphi下的那个聊天程序,太简单了,没有什么价值!
我需要的是socket ,对于服务器端是如何处理信息的转发的!
比如当服务器连接了4,50台客户机的时候,机器a发信息给b,
服务器是如何处理的呢?

另外,sockethandle有什么用,各种资料上说用处不小
我也不知道该怎么用?那位指教一下,谢谢@!!!!!!



 
我也正在想你的这个问题!有进展时互相通个气好吗?
 
叶林
好的!email呢?
xxhsh@263.net
 
NetMeeting不是很好的工具吗?
 
Internet盛行的今天,网上聊天已成为一种时尚。同时,各单位已建成了自己的局域网;能否在局域网上实现聊天呢?可以,网上到处都有这种工具。当然,我们可以拥有自己版权的聊天工具。

  User Datagram Protocol (UDP)协议,是一种无连接协议。在Delphi中利用这种协议,可以轻松的编写出聊天程序,以下的程序,在Delphi 5+Pwin98中通过。

  打开Delphi,新建Application

放置以下几个控件:Panel1、Panel2,其属性如下:







  然后,放置以下控件:Edit1

ListBox1

Memo1

Button1

Button2

BitBtn1

Nmudp1其主要控件的属性如下:







  各主要控件的功能如下:







现在的界面如下:











源程序如下:





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;//远程主机的名称或地址.





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;





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地址加入到网友中即可实现实时聊天了

一个属于自己版权的聊天程序,就这样编写成功了。


程序运行时,自动加入两个网友:"大家"和本地计算机名称,运行时,界面如下:











当然,你可以增加更多的内容,使程序更加的完善,以求更多的功能。
 
多人接受答案了。
 
后退
顶部