QQ怎样用Delphi来实现呢?(请高手们前来发表一些建议,此话题长期有效)(100分)

  • 主题发起人 主题发起人 菜鸟王子
  • 开始时间 开始时间

菜鸟王子

Unregistered / Unconfirmed
GUEST, unregistred user!
请大家都来灌水吧。
我想知道具体设计的过程,以及他的数据库设计方法。
我想仿照QQ来写一个Internet网上聊天的工具。
因为我是第一次编大型程序,所以不知从何入手,请高手指点。
我明年就要毕业了,所以要为以后准备点东西。
请高手帮忙,关注关注象我一样的菜鸟吧,在此,谢过大家了。
 
1、服务器上设用户数据库及服务程序
2、客户端设置服务器地址,客户朋友的IP由服务器通知,包括在线,上下线等。
3、客户端获得朋友IP后,直接与朋友端的客户机联系,以减轻服务器负担。
主要就是这么多了,自己设计吧,没什么蛮多的新技术,关键是工程组织问题,如果要
商业化,就还有数据加密算法的问题了,自己看书吧,大一点的书店都有加密算法的
书卖。
 
好好学习以下三层数据构架,你会发现其实很容易实现
比如说采用com+或其他,试一试!
 
首先,非常感谢两位大师的指导。我还想问一下,如果用数据库的三层结构,
是不是要用到数据库远程模块,如果用RemoteDataModule,用什么连接效率更高呢?
是TDCOMConnect,还是TSocketConnect or TWebConnect or Other One?
还有,用这些连接能在Internet上 连上 服务器程序么?(我知道局域网中是可以的,但
Internet呢?),再者,如何处理 两个 局域网 中的客户通信呢?(要知道,他们的IP
是有可能相同的)。如何跨越网关,透过防火墙呢,如何穿透代理服务器呢?

我真的很菜鸟,请大师不要笑我。
我恳请大师:请再次指导!
谢谢。
 
数据库远程模块是肯定要用到的,具体用那种,各有所长,我一般用TSocketConnect
 
他们之间有什么不同么?
 
我也对这个话题感兴趣,以后多多讨论
 
写upd的socket。
 
谢谢大家,原来有这么多志同道合的人,我非常高兴。
希望大家能够并肩战斗,共同学习。
 
我认为VC在这方面比DELPHI强吧
 
网络编程不存在VC比Delphi强之类的说法。VC是调用Windows Socket API,Delphi同样也
是调用Windows Socket API,主要还是看个人的编程功力。建议写此类程序使用多线程和
阻塞式socket。
 
请问如果要用DELPHI写一个类似的程序,不知道大家要用什么控件,TNMUDP吗
还是INDY里面的那些新东西呢?[?][red][/red]
望有经验的朋友多多指点
 
客户端用网络控件,服务器当然是用WINSOCK SDK函数了,自己写代码,多线程阻塞式是
效率最高的,不过要看个人的功力了
 
http://wolfsoft.nugoo.com/
这里面有个简易的聊天程序,自己找一下,有原码
 
楼上的老兄,我怎么没有找到呀。我主要想了解一些服务器方面的知识。
比如服务器有那些功能,怎样实现?
 
[?]TNMUDP控件接收数据时为什么会有乱码??(其它简单的代码省去了)代码如下:
点发送按钮:
procedure TForm1.Button1Click(Sender: TObject);
var txt:pchar;
begin
if memo1.Text ='' then
begin
statusbar1.SimpleText :='null to send!';
exit;
end;
GetMem(txt,length(memo1.Text)+1);
Zeromemory(txt,length(memo1.Text )+1);
txt:=pchar(memo1.Text );
nmudp1.SendBuffer(txt^,length(memo1.Text ));
end;
接收时:
procedure TForm1.NMUDP1DataReceived(Sender: TComponent;
NumberBytes: Integer; FromIP: String; Port: Integer);
var txt:pchar;
count:integer;
begin
statusbar1.SimpleText :='receving data';
getmem(txt,numberbytes+1);
zeromemory(txt,numberbytes+1);
nmudp1.ReadBuffer(txt^,count);
memo2.Lines.Add('À´×Ô:'+FromIP+'¶Ë¿Ú:'+inttostr(port)+'ÄÚÈÝΪ:'+txt);
freemem(txt);
statusbar1.SimpleText :='data received';
end;
当字符大于5或6个时,后面的数据就成了乱码,IT同胞们指点.
getmem(txt,numberbytes+1);接收缓冲区定义大小应该没有问题吧??????
 
其中nmudp1.SendBuffer(txt^,length(memo1.Text ));
应该改为:nmudp1.SendBuffer(txt^,length(memo1.Text )+1);
还有:如果你发送的是中文,必须注意
nmudp1.ReadBuffer(txt^,count);中的Count为偶数。
其中Count的数值不能大于NumberBytes
 
1.先感谢,但是改了之后,还是没能解决问题.
2.而且nmudp1.ReadBuffer(txt^,count);中的COUNT是什么作用???
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
后退
顶部