精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>● Delphi>>Delphi 网络编程>>Re:在Sock程序之间如何传递记录类型?

主题:Re:在Sock程序之间如何传递记录类型?
发信人: glynad()
整理人: teleme(2001-08-07 13:19:42), 站内信件
【 在 fsswyjz 的大作中提到:】

:......
 TSendTxt=packed Record 
Size:integer; 
text:array [0..127] of char; 
Param:integer; 
Value:integer; 
end; 

procedure TfrmTtsServer.sckServerClientRead(Sender: TObject; 
Socket: TCustomWinSocket); 
var 
SendTxt:TSendTxt; 
Buffer:array [0..102400]of char; 
i,PacketLen,Receivelen :integer; 
begin 
//Socket.SocketHandle 
tmWait.Enabled :=true; 
PacketLen := SizeOf(TSendTxt); 
ReceiveLen := Socket.ReceiveLength; 
if (ReceiveLen mod PacketLen) <> 0 then 
Exit; 
Socket.ReceiveBuf(Buffer, ReceiveLen); 
for i := 0 to ReceiveLen div SizeOf(TSendTxt) - 1 do 
begin 
Move(Buffer, SendTxt, PacketLen); 
memo1.Lines.Add(‘rec ‘+inttostr(Socket.SocketHandle)); 
ReceiveData(sendTxt,socket.SocketHandle); 
//socket.SendBuf(sendtxt,sizeof(TsendTxt)); 
Move(Buffer[PacketLen], Buffer, ReceiveLen - (i + 1) * PacketLen); 
end; 
end; 

//发 
function TForm1.SendTxt(ChannelNo:integer; sSendText: string):boolean; 
var 
len:integer; 
SendTxt:TSendTxt; 
isize:integer; 
buf:string; 
iId:integer; 
begin 
Len := length(sSendText); 
FillChar(SendTxt,sizeof(TsendTxt),0); 
SendTxt.Value := tbSpeed.Position; 
if len=0 then 
begin 
Result:=false; 
exit; 
end; 
repeat 
if len>128 then 
begin 
{mbSingleByte 单字母 
mbLeadByte 双字节第一位 
mbTrailByte 双字节第二位 

if ByteType(sSendText,128)=mbLeadByte then//末尾是否为半个汉字 
begin 
iSize:=127; 
Buf:=copy(sSendText,1,127); 
sSendText:=copy(sSendText,128,Len-127); 
Len := Len-127; 
end 
else 
begin 
iSize:=128; 
Buf:=copy(sSendText,1,128); 
sSendText:=Copy(sSendText,129,len-128); 
len:=len-128; 
end; 
end 
else 
begin 
iSize:=len; 
buf:=sSendText; 
sSendText:=‘‘; 
len:=0; 
end; 
//send 
sendtxt.Size := iSize; 
strpcopy(SendTxt.text,buf); 
iId:=VocStatu[ChannelNO].ComponentId; 

if Components[iId] is TClientSocket then 
(Components[iId] as TClientSocket).Socket.SendBuf(Sendtxt,sizeof(TSendTxt)) 
else 
caption:=Components[iId].Name; 

until len<=0

end;


[关闭][返回]