A
aiyuheyan
Unregistered / Unconfirmed
GUEST, unregistred user!
我用socket.sendtext发送两条消息,如何socket.ReceiveText分开接收,
在线等待
在线等待
.procedure TForm1.Button1Click(Sender: TObject);
var
s: string;
len: integer;
begin
s:= '0123456789';
len:= Length(s)+1;
//+1是因为要包括字符串后面的#0,如果是非文本数据,不用加1
ClientSocket1.Socket.SendBuf(len, Sizeof(Integer));
len:= ClientSocket1.Socket.SendBuf(S, len);
Memo1.Lines.Add('发送: '+IntToStr(len));
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
i: integer;
s: string;
begin
{本代码只支持一个ClientSocket连接,如果需要处理多个连接,所以用一数组或者链表
保存 Socket句柄与之对应的状态 }
if (Tag= 0) then
//用Tag保存状态,0时表示未接收到当前数据包大小
begin
if (Socket.ReceiveLength>=Sizeof(Integer)) then
//缓冲区数据大于等于4时才读
//取数据包大小
begin
Socket.ReceiveBuf(i, Sizeof(Integer));
//SizeOf(Integer)为4
Tag:= i;
end;
end else
begin
//非0时,表示Tag是数据包的大小
if (Socket.ReceiveLength>= Tag) then
begin
{ 这里的操作可以写成一个函数,之后把数据传递给函数,这里为了简单起见,所以
没有这样做 }
SetLength(s, Tag);
Socket.ReceiveBuf(s, Tag);
Memo1.Lines.Add(s);
Tag:= 0;
//重置状态
end;
end;
end;