关于多线程的WINSOCKET编程(使用DELPHI中的控件)(30分)

  • 主题发起人 主题发起人 FlyKnight2
  • 开始时间 开始时间
F

FlyKnight2

Unregistered / Unconfirmed
GUEST, unregistred user!
大家好!
我刚开始步入网络编程这个行列,在实际的开发过程中碰到了许多的难点,因此想向你寻求一些帮助。
我正在写一个网络聊天程序,其基本模式是,多个客户端,一个服务器端,客户端之间的通信都必需通过服务器来传发。
因此服务器端采用多线程方程,TServerSocket也支持。由于手上没有资料,完全靠看的半懂非懂的E文帮助,许多的概念不是非常的清楚。
继续以上的程序:在服务器端,平常处于LISTING,一旦有客户请求连接,则服务器的OnGetThread事件响应,在此我将产生一个TServerClientThread类型的线程用于专门接收客户端的数据信息(问题:这个线程的起动好像是当客户端发送了数据才会运行,一旦数据取完又进入暂定状态。问题:该线程运后,一旦客户端断开,该线程还会停留在内存中,只烦)。为了能实现向客户发送数据在该事件中我又产生一个TThread进程专门用于发送数据给客户端(问题:一旦这个线程运行后,会影响整个系统的速度,才只启动了一个线程)。以上这个程序虽然实现了数据的传输,但不是很理想,不知到像QICQ,IRC这类的软件能够同时连接上万个用户是如何实现的。
本人学而不精,还望高人不惜指教。

飞骑士(FlyKnight)
cmooworld.163.net
fly_knight@163.net
yrworld@163.net
 
先看Delphi的Demo/internet/chat,再谈
 
针对你上面的提问我有个问题疑问:你既然在服务端是多线程负责接收和发送,而你的
各个客户端是通过服务器转发消息的,那你怎么样做到数据的转发在多线程之间是怎
么样做到同步的呢?我想这是一个很困难的事情。
我建议你的各个客户端的信息不要通过服务器转发,而是直接相连。
其实你去看看ICQ的协议的设计就知道了。
 
如果采用ICQ的型式,不能作到多个同时进行数据传输.并由于这个程序不仅是传输一些文字,还要传输大量的和连继的语音数据.请问各位有什么好的解决方法.
 
你现在要做的,与我现在正在做的有点相像.
我是采用的数据表进行缓冲的。
每个线程不停的扫描数据表,当扫描到要发送的数据是,就发送出去。
每个客户是通过两个TCP通道连接主机的。一个用于发送大量的数据,
另一个用与接受服务器发来的大量的数据。
 
gben你好!
如果你也在做,是否已成功,如果成功并且你的程序是非商业的,能否发一份给我学习学习. fly_knight@163.net
 
this program is very easy!!please ask another one!
 
FlyKnight2
非常不好意思,我的程序是用于证券行业的,源码是不能外泻的。
不过有问题我们可以大家探讨。
你的问题其实好解决:
客户之间用TCP连接,客户与服务器之间用UDP通信。
这样服务器就不会造成太大的负担。
客户端启动以后就将自己的IP地址在服务器上注册,如服务器要与客户端通信
就必须找相应的客户的IP地址了。然后将信息发给客户。
 
请问哪里有类似ICQ的源码或协议说明,请mail 我一份 fireShine@21cn.com
 
我也要!
lcjiang@telekbird.com.cn
 
我也要!!
danceofwind@990.net
 
http://www.student.nada.kth.se/~d95-mih/icq/
大家可在这上面Down.
 
我也在做这个,而且是INTERNET上的,这个问题已经解决,可以找我。
sherman@soliton.com.cn
 
>>如果采用ICQ的型式,不能作到多个同时进行数据传输.并由于这个程序不仅是传输
>>一些文字,还要传输大量的和连继的语音数据.请问各位有什么好的解决方法.

依我所建议你可用另一个TCP通道每隔n秒发一数据请求,服务器在接收到此请求
后,再将数据发送给客户。这样就做到了’同时‘传送大量的数据了。

 
康炜の自由空间有一个例子
http://www.net-wing.net/kangwei/
热带鱼聊天室 2.000及其DELPHI源程序
(第三遍)
 
接受答案了.
 
后退
顶部