Delphi xe5 開發
通訊資料包格式
頭標志(0X02) 1 BYTE
業務資料包長度 4 BYTE
業務資料包 n BYTE
尾標志(0X03) 1 BYTE
校驗碼 1 BYTE
procedure TForm1.queryBankClick(Sender: TObject);
var
senddata ,str, getstring : string;
makecode, i: Integer;
begin
str := Format('%3s%4s%4s%4s%-20s', ['111', '0991', '1100', '0010', ‘13609994211’]);
str := Format('%.4d%s', [Length(str), str]);
makecode := ord(#02);
for I := 1 to Length(str) do
begin
makecode := makecode xor Ord(str[i]);
end;
makecode := makecode xor ord(#03);
senddata := #02 + str + #03 + Chr(makecode);
if SendToServer(senddata, getstring) = 0 then
begin
end
其中 SendToServer 內容如下:
function SendToServer(const senddata: string; var Retstring: string): Integer;
var
tcpclnt: TIdTCPClient;
readchar: Char;
readbyte, readbyte2: Byte;
sendstr: TIdBytes;
startTime: Cardinal;
i , makecode: Integer; //效應字付
begin
Result := -1;
tcpclnt := TIdTCPClient.Create(nil);
Retstring := '';
makecode := ord(#02);
try
tcpclnt.Host := '136.204.9.11';
tcpclnt.Port := 1111;
try
tcpclnt.Connect;
if not tcpclnt.Connected then
begin
Result := -2;
exit;
end;
except
Result := -2;
exit;
end;
SetLength(sendstr, Length(senddata));
move(senddata[1], sendstr[0], Length(senddata));
tcpclnt.IOHandler.Write(sendstr, Length(sendstr) + 1);
//超時30秒
startTime := GetTickCount + 30000;
repeat
if startTime <= GetTickCount then
begin
Result := -3;
exit;
end;
readchar := tcpclnt.IOHandler.ReadChar();
until readchar = #02;
finally
FreeAndNil(tcpclnt);
end;
end;
問題是:
只要程式運行到 readchar := tcpclnt.IOHandler.ReadChar(); 這里 就會出現 connection closed gracefully ?
uj5u.com熱心網友回復:
說明是服務端報錯了。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/78868.html
標籤:網絡通信/分布式開發
下一篇:請問如何轉為DELPHI
