不是极度困难,却可以考验你的水平,高手进来讨论吧!

Kandy 2002-09-02 04:55:36
我想编写一个聊天的服务器程序。

我的思路是这样的。

请注意:没有具体的CLINET端。
模式是B/S模式,也就是我们通用的聊天室。

假定我请求http://61.166.154.14:8080/,这是没有带任何querystring的,服务的守护线程收到后,就发回一个普通的html给你,这个html是带了两个frame的,一个用于显示聊天内容,一个用于发送消息。

假如我是从浏览器不停的向服务器请求读数据的话,就象类似的FRAME里东西,要不停刷新。这样做出来的效果是极差劲的。

所以我考虑用SOCKET。
在聊天室的关键是:
发言的部分这儿socket一连上以后就close掉了,现在我发一条消息,服务器处理完,然后就close掉。
显示所有对话消息那个frame就有点特殊了,socket连上以后,服务器端取inputstream和outputstream(DELPHI里可能不这么叫,反正是STREAM),然后就保持,一直不close,有新消息出来就直接输出来了。
这样,只要不close,那就是一直连上的,服务器端有什么变化就直接print过来了,客户端也就有变化了。所以这就实现了无刷新技术的动态写到客户端的浏览器,而不是让用户感觉到窗口一直是在刷新的。
其实说白了就是从SERVER端把数据利用STREAM推到BROWER端。
思路基本是这样的,怎么来实现呢?

我用TCPSERVER,在ONACCEPT事件中弹出一个对话。例如:我监测我测试服务器(IP:12.2.2.2)的9000端口,当我在浏览器里加一个FRAME让他URL连接到http://12.2.2.2:9000 这个时候会激发SERVER里的事件并且弹出对话框,但是接下来会有错误提示,因为我没有加任何处理,所以SOCKET根本没有什么握手之类的操作,可是现在不允许有CLINET端,从C和JAVA来看都是肯定能完成这样的操作的,在DELPHI中怎么操作呢?记着,客户都是用溜览器的……我觉得必须要用SREAM从SERVER“推”到BROWER……

请大家踊跃发言,并且提供好的操作和方法,最好是具体怎么来实现。

欢迎讨论。
...全文
47 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
Kandy 2003-02-13
  • 打赏
  • 举报
回复
哎,关于问题的讨论谁也没有说到实质,这……这叫我咋给分呐……
clion 2003-01-31
  • 打赏
  • 举报
回复
HTTP协议的连接建立主动权在SERVER,所以任何SOCKET控件都可简单实现这问题的,就是SERVER不要关闭SOCKET,一有数据就向CLIENT SOCKET写入.只有多次写入出错才认为CLIENT已经关闭IE了.SERVER自己管理一个SOCKET的列表就行,太简单了.
ricetons 2003-01-31
  • 打赏
  • 举报
回复
用stream的server push,不如用client pull.
也就是利用meta-refresh语句。
但是服务器的负担会小很多。
zhang21cnboy 2003-01-21
  • 打赏
  • 举报
回复
既然你已经有了c++的代码,那么用delphi实现起来就很容易了!

你用c++写的聊天室,跟delphi写的,在逻辑上没有一点区别阿!

Kandy 2003-01-21
  • 打赏
  • 举报
回复
喂喂喂!!!!!!!各位·!!!!不是重点在客户端,也不可以用任何ACTTVE,用C++写出来的聊天室在这里:http://www.ichat.net.cn

你们可以到聊天室去感受感受嘛~~~~~至于道理就是我说的那么实现的,至于拿到DELPHI里这里讨论还是希望大家能提高提高~~~~~
Alexs 2003-01-21
  • 打赏
  • 举报
回复
Up!
rock2000 2003-01-17
  • 打赏
  • 举报
回复
和IE的订阅服务器很象,到微软的知识库看一下。
diruser 2003-01-17
  • 打赏
  • 举报
回复
用udp相关组件
hhzxf 2003-01-17
  • 打赏
  • 举报
回复
这是一个WEBSERVICE程序。按照你的想法,你可以在B端放一个ACTIVEX那样或许可以用SOCKET编程。
jackystar 2003-01-17
  • 打赏
  • 举报
回复
up
hydonlee 2003-01-17
  • 打赏
  • 举报
回复
感觉这个问题的重点是在客户端,也就是IE能不能满足你的要求。
rikky 2003-01-15
  • 打赏
  • 举报
回复
哈哈,我做的第一个这方面的程序啊
jiangshi99 2003-01-15
  • 打赏
  • 举报
回复
UP!
CloneCenter 2003-01-15
  • 打赏
  • 举报
回复
哈哈,不懂啊,只能 UP 了。
stanely 2002-09-17
  • 打赏
  • 举报
回复
udp广播?
Kandy 2002-09-09
  • 打赏
  • 举报
回复
APPLET不予以考虑,XP中已经没有他的活头了,TIDHttp,TIDTCPServer,TTCPServer似乎均不可以
ybbob 2002-09-06
  • 打赏
  • 举报
回复
up
forgetcsdn 2002-09-06
  • 打赏
  • 举报
回复
不要对不对就叫高手、高难度的问题好不好?
就是一个点点的聊天,客户端、服务器都是可以动态设置的;
不知道你是如何想的,我不是高手,但我懂
Kandy 2002-09-06
  • 打赏
  • 举报
回复
难道高手都睡觉了????用JAVA和C都很容易就写出来这些对流的操作了~~怎么DELPHI竟然变得困难?我不想让他们说DELPHI不好用,所以决定用DELPHI写一写,怎么都没有发话的?
halfdream 2002-09-06
  • 打赏
  • 举报
回复
至于具体实现服务端的编程.
DELPHI自带的TServerSocket,TIDHttp,TIDTCPServer,TTCPServer
任一个都可以用吧.

加载更多回复(7)

1,593

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 网络通信/分布式开发
社区管理员
  • 网络通信/分布式开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧