捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
 
广告
评论:类似QQ的UDP聊天程序
liuyax 22778 2006/4/10 8:48:36
因为开始我使用了Idclient,所以自动会加入引用单元,后来改为IdServer,忘记删掉引用的idClient。
ABinding.SendTo为监听端口发送数据时使用,client的监听端口只接收数据,接收后并不立即返回信息。只在需要向其它用户发送消息的时候调用SendBuffer发送数据,这时用的不是监听的端口,是应用程序自动分配的端口,不能用ABinding.Sendto,这是监听端口发送数据。
jojozzf 22756 2006/4/8 20:31:27
哦,好的,我试者编写一下程序~
问题又来了,呵呵:
1、我上网浏览Delphi网络编程时发现大家讨论的一个问题:
IdUDPServer控件不能使用IdUDPServer.SendBuffer发送数据,发送数据应该用ABinding.SendTo,对此你的看法是什么?用IdUDPServer.SendBuffer发送数据会出现什么问题吗?
2、在Client端程序中,没有用到TIdUDPClient,你在uses中加IdUDPClient的用意是什么?
期待你的解答~~~~~~~谢谢!
liuyax 22744 2006/4/8 8:44:02
服务器端的广播很好实现,遍历每个在线用户,分别发送消息就可以了。
jojozzf 22734 2006/4/7 15:34:36
谢谢你的解答,我会根据你的回答再仔细去学习程序。
我想要是在Server端也实现聊天功能,直接在Server端打开Client.exe就可以参加聊天了呵呵。我还有个想法,能不能把程序改动,使服务器端管理员可以跟所有在线的人员广播消息(如通知)?
liuyax 22727 2006/4/7 13:53:47
msg.info是一个长度为1024的字符数组,用来存储消息内容,当一个client登录时,从server发给这个client的msg.info中存放当前在线用户的列表,根据msg.msgtype判断当前消息内容是登录、注销、还是其它聊天等类型。
当一个client登录以后,它的信息会被保存在server端的Listview用户列表中,server端根据GetOnlineList这个函数从Listview列表中逐个生成string类型的用户列表信息。发送给每个用户,以方便各个client更新在线用户列表。
jojozzf 22719 2006/4/7 9:45:04
呵,今天早上又在研究你的程序了,我的问题是:
客户端的代码中
procedure TfrmMain.UDPClientUDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);过程中
 OnlineList:= msg.info; //是把聊天信息内容msg.info赋值给OnlineList吧
 ParseList(OnlineList); //OnlineList中的内容传递给ParseList()函数
msg.info是MsgInfo记录类型的一个分量,是指传递的聊天内容吗?那它怎么能赋值给OnlineList,而且怎么体现出它的内容是字符串把每个用户用‘;’分割,一个用户的信息项用‘,’分割??

真不好意思,一直问了这么多问题。。。期待你的解答,谢谢
jojozzf 22703 2006/4/6 21:13:09
嗯!明白了!真的谢谢你了!
我还有问题……
1.在编写客户端程序时,传建了Config.ini文件,从代码看来,它的作用是记录用户登录的昵称和服务器地址信息,要是不用这个方法可以吗?
2.要是想在服务器端也添加聊天功能,要如何实现呀?是不是跟客户端一样的编程方法?
liuyax 22694 2006/4/6 15:00:27
1、Idstack单元已包含在最上面的uses中
2、ParseList作用为获取在线用户列表,发过来的为一串字符,每个用户之间用“;”分割,需要分别解析,然后添加到treeview列表中
jojozzf 22687 2006/4/6 11:55:30
function TfrmMain.ParseList(OnlineList:string):Boolean
这个函数的作用我不太明白~~
jojozzf 22644 2006/4/4 21:55:33
谢谢你的答复!呵呵
我又有问题了~~~~
你的代码中的StrPcopy(msg.from_ip, GStack.LocalAddress);是指获得本机IP地址并把他复制到msg.from_ip中吧?我知道了Gstack是IdStack单元中预定义的TIdstack类型,在程序中不需要在uses 中添加IdStack吗?
liuyax 22472 2006/3/29 9:56:11
to jojozzf:
    客户端也使用TIdUDPServer是为了方便客户端之间直接进行数据交换,而不需要通过服务器中转(传送文件、视频等),因为TIdUDPServer可以在一个端口监听。
    使用UDPAntiFreeze是为了透明地解决客户程序用户界面“冻结”的问题,因为使用的socket是“阻塞式”,必须等到socket调用完成后才能返回,这段时间用户界面出现“僵化”状况,而这个控件能够避开这个缺点。
jojozzf 22380 2006/3/25 19:29:58
你好!因为我毕业设计要求编写聊天系统,学习了你写的程序,我有一些疑问如下,希望得到你的回答,谢谢!
1.你的程序服务器端和客户端都使用了控件:TIdUDPServer,而没有使用TIdUDPClient。TIdUDPServer这个组件是用于服务器端监听和接收数据的,也可以用于发送数据吗??还是说客户端发送数据是要利用TIdUDPClient组件?你是利用StrPCopy()实现的吗?
2.客户端和服务器端都使用了控件UDPAntiFreeze,上网查找只了解到它是来透明地解决客户程序用户界面“冻结”的问题,但我还是不太明白。你能跟我说明一下吗?

现在还在学习你的程序,还会遇到好多问题,但是我会认真学的,谢谢你编写的程序!
sohusun 21135 2006/1/20 15:58:38
没木马...很想认识作者,不知道作者是否可以留个联系方法...
shugeng 20168 2005/12/20 14:32:54
没有木马,不错的程序。谢谢!
alex_niki 20126 2005/12/19 11:29:26
这个是解压时的日志

2005-12-16 15:07:57 已删除  GXLX-116\Administrator WinRAR.exe D:\delphi\liuyax_IdUdpComm\IdUdpComm\bin\Server.exe BackDoor-CQR (特洛伊)

源代码是么有问题的
fxboy1983 20081 2005/12/17 2:12:50
下来看看,学习学习
liuyax 20072 2005/12/16 17:37:34
绝对不可能有木马!你的查毒软件严重误报!在8000端口监听数据包就是有木马吗?
alex_niki 20065 2005/12/16 15:23:46
卖咖啡查到服务端程序有木马
x00ganlu 20046 2005/12/15 20:11:49
不错了,我正在为明天交不出作业烦恼呢
老师要我们做个类似QQ的越类似越好,可惜我连你做的这个基本功能都不会,都不知道这个学期怎么死法........
jj198 19969 2005/12/13 11:14:33
那用得到!唉,还以为能对我有启发呢。。。
第一页 上一页 下一页 最后页 有 43 条纪录 共3页 21 - 40
 用户名:
 密 码:
自动登陆(30天有效)
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表