在使用非阻塞的ServerSocket与阻塞的ClientSocket通讯时,为什么可以收到信息,而发出的信息ClientSocket收不到??(急)(100分

  • 主题发起人 rich_liu
  • 开始时间
R

rich_liu

Unregistered / Unconfirmed
GUEST, unregistred user!
在使用非阻塞的ServerSocket与阻塞的ClientSocket通讯时,为什么可以收到信息,而发出的信息ClientSocket收不到??(急)(100分)<br />procedure TfrmSp_Fzserver.ServerFzSpClientRead(Sender: TObject;
Socket: TCustomWinSocket);
var
RecvSize1,RecvSize2,DeSize:integer;
commandI,MessageSize:LongWord;
buf:array of byte;
stream1:TWinSocketStream;
begin
RecvSize1:=0;
RecvSize2:=0;
FillChar(cHeadercon,SizeOf(cHeadercon),0);
RecvSize1:=socket.ReceiveBuf(cHeadercon,SizeOf(cHeadercon));
commandI:=ntohl(cHeadercon.CmdId);
MessageSize:=ntohl(cHeadercon.msgLen);
if commandI=$23 then
begin
memo1.Lines.Add('********************接收到Request请求********************');
DeSize:=SizeOf(cRequest);
FillChar(cRequest,SizeOf(cRequest),0);
FillChar(cRequest_Resp,SizeOf(cRequest_Resp),0);
RecvSize2:=Socket.ReceiveBuf(cRequest,MessageSize-RecvSize1);
if (RecvSize2+RecvSize1)<>MessageSize then
begin
memo1.Lines.Add('**********************Request数据接收错误*******************');
exit;
end;
fillchar(sHeadercon,sizeOf(sHeadercon),0);
RecvSize2:=0;RecvSize1:=0;
sHeaderCon.CmdId:=htonl($80000023);
sHeaderCon.SeqNum1:=cHeaderCon.SeqNum1;
sHeaderCon.SeqNum2:=cHeaderCon.SeqNum2;
sHeaderCon.SeqNum3:=cHeaderCon.SeqNum3;
sHeaderCon.MsgLen:=htonl(sizeof(sHeadercon)+sizeof(cRequest_Resp));
cRequest_Resp.result:=0;
setlength(buf,29);
copymemory(@buf[0],@cHeadercon,SizeOf(cHeadercon));
copymemory(@buf[SizeOf(cHeadercon)],@cRequest_resp,SizeOf(cRequest_Resp));
RecvSize1:=Socket.SendBuf(buf[0],SizeOf(cHeadercon)+SizeOf(cRequest_Resp)); //SendBuf(buf[0],SizeOf(cHeadercon)+SizeOf(cRequest_Resp));
if (RecvSize1+RecvSize2)<>ntohl(cHeadercon.MsgLen) then
begin
memo1.Lines.Add('**********************响应Request请求错误***********************');
exit;
end;
end
end;
 
[:D]
顶一下
 
顶部