您的位置:程序门 -> delphi -> 网络通信/分布式开发



tidtcpserver如何用readbuff()来接收数据?


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


tidtcpserver如何用readbuff()来接收数据?[已结贴,结贴人:dinglinger]
发表于:2008-02-18 14:44:07 楼主
对方发送数据的方法是封装在一个dll中,发送的数据是通过tclientsocket发送的;
现在要在d7中用tidtcpserver来接收数据
在tidtcpserver.onexevute中接收数据时,使用:
var
  recedata:string;
 

  recedata:=athread.connection.readln();
无法接收数据........

用:
var
    recebuffer:array   [0..255]   of   byte;
    recelen:integer;

fillchar(recebuffer,256,#0);
recelen:=256;
recelen:=athread.connection.socket.recv(recebuffer,recelen);

//无法接收数据。。。。。且出现了死循环。。。。。。   -_-#

倒底如何接收数据?
发表于:2008-02-18 17:28:111楼 得分:0
没有人回复?.........-_-!!
发表于:2008-02-18 21:23:232楼 得分:8
with   athread.connection   do
begin
    readbuffer(.......);
    or
    readln(.....);
end;
发表于:2008-02-18 21:55:253楼 得分:7
tidtcpserver   是阻塞的,只有收到指定个数的数据程序才返回,
发表于:2008-02-18 22:11:334楼 得分:0
hongqi162   :
  月亮兄,不知道您有没有测试呢?我试过了,不行。   -_-!!

disikj(人大代表):这个我倒没有仔细看,但如果真是这样,那可不妙啊。。。。


难道说,indy组件中的tidtcpserver,tidtcpclient只能配对使用?!

我不这么认为,但却始终没有找到数据接收的方法。

哎,,,明天再抽时间测试下吧。
发表于:2008-02-26 16:39:115楼 得分:0
哎,看了很多资料,才知道,
可以用这个来接收数据:
var
  tempbuff:string;

  ...
  tempbuff:=indytcpserver.connection.readcurrentbuff;//方法名可以不对,记不清了。

是可以接收到数据的,但是问题较为严重:
1、并不是每次客户端发数据,服务端就触发接收事件,这个令人很头痛!
2、就算是有接收事件触发,但接收的数据内容却是不正确的!这也令人头痛!

附:我的控件并没有设置其他什么属性,只是设置了端口号,然后就开始监听。不知道是不是有什么属性要设置呢?

基于上面两点问量,基本放弃了这样接收数据。

经过网络查询,从大侠处才知道:原来tindytcpserver只提供流操作服务,没有同步操作功能,看来,无法这样来实现通讯了。
发表于:2008-02-27 12:24:276楼 得分:5
用线程啊,要看收到的数据是结构类型的还是字符类型的,


快速检索

最新资讯
热门点击