社区
网络通信/分布式开发
帖子详情
一是用TidTCPClient我傻了
houyichong
2010-04-28 10:42:21
以前用TClientSocket,TServerSocket做过呼叫中心的程序
就一直没有使用过Indy的TidTCPClient,TidTCPServer来实现
现在就用这两个indy控件来实现一个简单的聊天程序
用户A 发信息给用户B,用户B的客户端收到信息怎么写啊(TidTCPClient)
现在用INDY阻塞方式来实现就没有事件来实现该功能了。
...全文
984
29
打赏
收藏
一是用TidTCPClient我傻了
以前用TClientSocket,TServerSocket做过呼叫中心的程序 就一直没有使用过Indy的TidTCPClient,TidTCPServer来实现 现在就用这两个indy控件来实现一个简单的聊天程序 用户A 发信息给用户B,用户B的客户端收到信息怎么写啊(TidTCPClient) 现在用INDY阻塞方式来实现就没有事件来实现该功能了。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
29 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Mit1208
2010-05-29
打赏
举报
回复
up.
houyichong
2010-05-28
打赏
举报
回复
zxd19821102,服务器肯定是可以马上回去客户端了,目前是客户端A通过服务器发送给B,B什么时候回复,B再通过服务器回复A,你想想吧。
sanguomi,你可以使用非堵塞方式,我不会用idTcpServer使用非阻塞式.
incoldwinter,装的是D7,INDY9没有demo可看,d6的demo不知道你看过没有,都是扯淡得很。
我觉得用IndyTCP做客户端和服务器端的通讯,而且是即时能反应处理的,这样用indy的效率很高,使用RFC格式会很爽,但是如果不同客户端间通过服务器进行通讯就很麻烦了。
天牌
2010-05-23
打赏
举报
回复
看INDY的DEMO吧
zxd19821102
2010-05-23
打赏
举报
回复
哦,没有发错帖子,呵呵
zxd19821102
2010-05-23
打赏
举报
回复
晕,发错帖子了
zxd19821102
2010-05-23
打赏
举报
回复
procedure TForm1.idtcpsrvr1Execute(AThread: TIdPeerThread);
var
rstr,tstr: string;
begin
AThread.connection.readtimeout:= 100;
try
AThread.Connection.CheckForDisconnect(True,True);
rstr:= AThread.Connection.ReadLn();
tstr:= Copy(rstr,0,7);
if rstr <> '' then
AThread.Connection.WriteLn('服务器已经收到您发来的信息:'+rstr);
mmo1.Lines.Add(rstr);
except
end;
end;
注:
INDY里的tcp是阻塞式传输。如果不设置AThread.connection.readtimeout的话,这个事件创建的线程会一直等待,多个客户端的时候,会耗资源.
SS_LO
2010-05-21
打赏
举报
回复
[Quote=引用 22 楼 ss_lo 的回复:]
各自能同时上线5000个的
[/Quote]
⊙﹏⊙b汗 鸽子
SS_LO
2010-05-21
打赏
举报
回复
各自能同时上线5000个的
sanguomi
2010-05-20
打赏
举报
回复
明白你的意思了
你可以新开一线程,把他挪到线程去处理
另外也可以,INDY的SOCKET默认是堵塞方式,你可以使用非堵塞方式
不会影响你其他操作,但是对你的技术要求高点
houyichong
2010-05-19
打赏
举报
回复
sanguomi:
如果A一发消息给B马上就能收到B的回复,
代码可以这样写:
IdTCPClient1.WriteLn(sMsg);
IdTCPClient1.ReadLn(';',-1,1000);
//但是如果B半天不回复你,这个客户端就死翘翘在干等,当然可以设置超时时间了。
//问题的关键是A用户给B用户发消息后不知道B用户什么时候会回复,IdTCPClient1没有相应的事件。
失踪的月亮继承TIdTCPClient定义一个类添加事件,但是还是用了
ReadFromStack(False, -1, False);会遇到同样的问题:干等的话,A客户端还能发送、接收其他消息吗?
你这样还不明白你还要我怎么问啊
tigerii
2010-05-18
打赏
举报
回复
还是用TClientSocket和TServerSocket好
sanguomi
2010-05-17
打赏
举报
回复
自己去看DEMO,连问问题都不会问
houyichong
2010-05-17
打赏
举报
回复
不行啊,客户端用TClientSocket,服务端会拒绝服务啊
houyichong
2010-05-17
打赏
举报
回复
客户端使用TClientSocket吧
sanguomi
2010-05-15
打赏
举报
回复
看了半天不知道楼主想表达什么意思
houyichong
2010-05-15
打赏
举报
回复
用户A发给用户B,用户B 1小时候回复用户A,我是通过服务器实现他俩之间的通讯的
hongqi162
2010-05-09
打赏
举报
回复
[Quote=引用 10 楼 houyichong 的回复:]
即时通系统,用户A发消息给用户B,但是用户B 半天不回答
InpLastSize := InpSize + FTCPClient.ReadFromStack(False, -1, False);
这行代码就会一直等待
这个时候用户A还得要收发其他消息该怎么处理?
[/Quote]
你把我发的那个组件安装上用了么?你用到DoDataAvailableEvent这个事件了么?
你要想接收其他用户的消息,你需要考虑的是建立点对点连接还是通过服务器中转,如果不通过服务器中转,实现你的要求不是一个tcpclient就可以解决的,你需要考虑一下你的程序架构再来写代码
houyichong
2010-05-08
打赏
举报
回复
当然如果真的做即时通是使用UDP的
houyichong
2010-05-08
打赏
举报
回复
一发命令就能够马上得到回复的当然用TIdTCPClient,TIdTCPServer是很理想的。
houyichong
2010-05-08
打赏
举报
回复
即时通系统,用户A发消息给用户B,但是用户B 半天不回答
InpLastSize := InpSize + FTCPClient.ReadFromStack(False, -1, False);
这行代码就会一直等待
这个时候用户A还得要收发其他消息该怎么处理?
加载更多回复(9)
TId
TCPClient
关于
TId
TCPClient
的几种方法 收藏
其实Indy比较简单,但是可以提供的方法太多了。我找了很久,才搞明白。
比方说这个读取缓冲区的数据,就有很多种方法。相对于T
TcpClient
的几种方法来说,
TId
TCPClient
确实提供了多种选择,不仔细研究真的容易糊涂(其实我比较喜欢用CurrentReadBuffer):
1、ReadFromStack
原型:function ReadFromStack(const ARaiseExcep
TId
TCPClient
详解
转发地址:http://blog.csdn.net/cowcga/article/details/6198382 关于
TId
TCPClient
的几种方法 收藏 其实Indy比较简单,但是可以提供的方法太多了。我找了很久,才搞明白。 比方说这个读取缓冲区的数据,就有很多种方法。相对于T
TcpClient
的几种方法来说,
TId
TCPClient
确实提供了多种选择,不仔细研究真的容易糊涂(其实我比...
关于
TId
TCPClient
的几种方法
关于
TId
TCPClient
的几种方法 收藏 其实Indy比较简单,但是可以提供的方法太多了。我找了很久,才搞明白。 比方说这个读取缓冲区的数据,就有很多种方法。相对于T
TcpClient
的几种方法来说,
TId
TCPClient
确实提供了多种选择,不仔细研究真的容易糊涂(其实我比较喜欢用CurrentReadBuffer): 1、ReadFromStack 原型:function Re
TId
TCPClient
的几种方法
其实Indy比较简单,但是可以提供的方法太多了。我找了很久,才搞明白。 比方说这个读取缓冲区的数据,就有很多种方法。相对于T
TcpClient
的几种方法来说,
TId
TCPClient
确实提供了多种选择,不仔细研究真的容易糊涂(其实我比较喜欢用CurrentReadBuffer): 1、ReadFromStack 原型:function ReadFromStack(const ARai
Tid
TcpClient
总结
Tid
TcpClient
包装了一个完整的TCP客户端,该客户端包括sock支持。该控件是以下客户端控件的父类:
TId
DayTime,
TId
Echo,
TId
Finger,
TId
FTP,
TId
Gopher,
TId
HTTP,
TId
NNTP,
TId
POP3,
TId
QUOTD,
TId
SMTP,
TId
Telnet, and
TId
Whois。 属性property BoundIP:
网络通信/分布式开发
1,593
社区成员
32,964
社区内容
发帖
与我相关
我的任务
网络通信/分布式开发
Delphi 网络通信/分布式开发
复制链接
扫一扫
分享
社区描述
Delphi 网络通信/分布式开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章