求IdTcpClient接受数据时界面冻结有关问题、接受数据有关问题
求IdTcpClient接受数据时界面冻结问题、接受数据问题?
1、IdTcpClient 在接受数据时,怎么样将数据接收到TStream中,里面那个几个参数是什么意思呀? 怎么样使它接收一定长度的数据?
2、在接受数据时截面出现冻结,一般怎么解决?(我把控件放在主线程里,在分线程里面接收数据),在界面上放上IdAntifreeze控件,怎么提示找不到IdAntifreeze.obj??
急,望大虾指点!!!
------解决方案--------------------
用这样的方式接收流:
IdTCPClient1->IOHandler->ReadStream(ms, nByteCount);
其中,ms是一个流对象,可以定义成TMemoryStream *ms;
nByteCount是要读取的字节数,这个数字在客户端并不知道是多少,所以需要在接收流以前,由服务端先将流的大小用一个整形数据过来,再接着发送流,客户端接收到这个整形数据,保存到某变量 nByteCount中,然后接收流数据,第二个参数指定为nByteCount
ReadStream第三个参数是指一直读取数据,直到断线为止,默认值为false,可以忽略。
------解决方案--------------------
用IdTCPClient1->IOHandler->CheckForDataOnSource(0);检查
然后判断
if (!IdTCPClient1->IOHandler->InputBufferIsEmpty())
// 有数据,用ReadStream读就行了
------解决方案--------------------
1、IdTcpClient 在接受数据时,怎么样将数据接收到TStream中,里面那个几个参数是什么意思呀? 怎么样使它接收一定长度的数据?
2、在接受数据时截面出现冻结,一般怎么解决?(我把控件放在主线程里,在分线程里面接收数据),在界面上放上IdAntifreeze控件,怎么提示找不到IdAntifreeze.obj??
急,望大虾指点!!!
------解决方案--------------------
用这样的方式接收流:
IdTCPClient1->IOHandler->ReadStream(ms, nByteCount);
其中,ms是一个流对象,可以定义成TMemoryStream *ms;
nByteCount是要读取的字节数,这个数字在客户端并不知道是多少,所以需要在接收流以前,由服务端先将流的大小用一个整形数据过来,再接着发送流,客户端接收到这个整形数据,保存到某变量 nByteCount中,然后接收流数据,第二个参数指定为nByteCount
ReadStream第三个参数是指一直读取数据,直到断线为止,默认值为false,可以忽略。
------解决方案--------------------
用IdTCPClient1->IOHandler->CheckForDataOnSource(0);检查
然后判断
if (!IdTCPClient1->IOHandler->InputBufferIsEmpty())
// 有数据,用ReadStream读就行了
------解决方案--------------------