| 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 |
| 那用得到!唉,还以为能对我有启发呢。。。 |