Socket数据接收问题!在线等待... (100分)

  • 主题发起人 主题发起人 wlandll
  • 开始时间 开始时间
W

wlandll

Unregistered / Unconfirmed
GUEST, unregistred user!
定义静态字符数组接收时是正确的:
var
RecvData:array[1..46] of char;

Recv(ICBC_BANK_SOCKET,RecvData,length(RecvData),0);
可是用动态数组接收时总是报错:
var
RecvData:array of char;
SetLength(RecvData,46);
Recv(ICBC_BANK_SOCKET,RecvData,length(RecvData),0);

动态数据是不是需要初始化, 该如何初始化。
 
怎么 没人帮忙啊!求助!
 
动态数据是需要初始化;
用setlength方法:
SetLength(var S; NewLength: Integer);
你的程序應是這樣吧:
var
RecvData:array of char;
begin
SetLength(RecvData,46);
Recv(ICBC_BANK_SOCKET,RecvData,length(RecvData),0);
end;

 
楼上的写的和我的一样,我只是省略了begin end
 
那你的RecvData都是定义成过程局部变量么?不定义成局部变量试试[:)]
 
To:qiulp,全是过程的内部变量,这有关系吗?
 
SetLength(RecvData,46);
设置完后应该是0..45,你看下是不是这个问题,具体的我没试,我写的也和你一样的,但我设置的比较大,65536.
我的想法可能不对,没试的!
 
调用fillchar看看。
 
fillchar过了,好象也不行!
 
不知道你在这里为什么要用动态数组,动态数组在SetLength之后,返回给RecvData的是一个地址指针,而Recv要的是具体已经开辟好的空间,所以报错了。

你是想不定长的接收字符吗?如果是那样的话,你可以定义一个长度参数传进来,然后截取你要的字符就可以了。

procedure TForm1.RecvDataPro(nLen:Integer);
var
RecvData:array[1..1000] of char; //这时将长度定长一点
begin
Recv(ICBC_BANK_SOCKET,RecvData,nLen,0);
end;
接收nLen长度的字符.
 
接受答案了.
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
900
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部