clientsocket如何保持长连接、一个事务多次请求连接怎么处理?

loveness 2016-08-04 01:03:45
clientsocket如何保持长连接、一个事务多次请求连接怎么处理?
问题描述
一个业务流程需要若干次通过clentsocket和服务器连接,每次连接都要判断是否处于连接状态,如果不在连接状态要重新连接,并根据服务器返回的数据进行下一步操作,流程示意图如下
socket连接判断,如果成功,数据初始处理1
........clientsocket处理1
根据serversocket返回数据,进行数据处理2
........clientsocket处理2
根据serversocke2返回数据,进行数据处理3
........clientsocket处理3
............
根据serversocke(n-1)返回数据,进行数据处理n
........clientsocket处理n

问题:
1:怎么判断clientsocket的返回数据是哪个处理环节的数据,或则如何保证socket返回的是本次请求的返回数据
2:clienttype 是用ctNonBlocking还是ctBlocking
3:如何保持长连接,开始socket是连接的,处理完返回数据后没有断开连接,通过Active判断,执行clientsocket2的时候发现连接自己断了,如何保持长连接
4:如何判断socket连接超时都没有返回数据
谁有clentsocket的实例,我在网上找的都是一次发送一次返回,没有多次交互的例子
...全文
1491 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhuang_bx 2016-08-19
  • 打赏
  • 举报
回复
clienttype 是用ctNonBlocking 如果长时间连接没有数据,要发心跳包 procedure TForm1.ClientSocket1Connect(Sender: TObject; Socket: TCustomWinSocket); begin //连接成功 end; procedure TForm1.ClientSocket1Disconnect(Sender: TObject; Socket: TCustomWinSocket); begin //连接断开 end; procedure TForm1.ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); begin //Socket出错 ErrorCode:=0;//屏蔽错误提示 //Socket.Close; //关闭这个出错的连接 end; procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); var buff:array[0..4095]of Char; t:string; i:Integer; begin t:=Socket.ReceiveText; //接收文本 //进行判断,做相应的处理 //接收数据方式2 //i:=Socket.ReceiveBuf(buff,4096); //i为实际数据长度 //buff接收的数据 end;
loveness 2016-08-04
  • 打赏
  • 举报
回复
delphi 真的没落了吗

1,593

社区成员

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

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