서버에서 받은 문자들은 클라이언트 메모에 잘 찍힙니다.
그런데 서버에 문자를 보낼때... 문제입니다.
접속 후 처음 서버에 문자를 '12345' 보냈을때는 서버에서 잘 받아집니다!
헌제 두번째로 '54321' 문자로 보내면... 처음에 왔던 '12345' 문자가 서버에서 받습니다.
서버 접속 후 맨 처음 보낸 문자만 계속 서버에서 받아집니다!
근데 신기한것은 서버에서 수신으로 'OK' 로 보내면 당연 클라이언트 로그에는 'OK'라고 잘 받아집니다.
그리고 클라이언트에서 다시 '54321' 서버에 보내면 '1234554321' 이케 서버에서 받습니다.
도통 무슨 문제인지 모르겠습니다. 어떤 문제인지 도움을 청합니다.
사용하는 컴퍼넌트
tcClient: TTcpClient;
tcThread: TIdThreadComponent;
TCPSercer 접속시 사용...
function TDM.GetComSvrConnect(pIP, pPort: String): Boolean;
begin
try
tcClient.Active := FALSE;
tcClient.Disconnect;
if (pIP = '') or (pPort = '') then Exit;
tcClient.RemoteHost := Trim(pIP);
tcClient.RemotePort := Trim(pPort);
tcClient.Connect;
finally
Result := tcClient.Connected;
tcThread.Active := Result;
if Result then DM.tcThread.Start;
end;
end;
TCPSercer 종료시 사용...
procedure TDM.SetComSvrDisconnect;
begin
tcClient.Disconnect;
tcClient.Active := FALSE;
tcThread.Stop;
tcThread.Active := FALSE;
end;
문자 송신시 사용...
procedure TfmTCPSocket.BtnSendClick(Sender: TObject);
const vSendArySize = 500;
var
f1: Integer;
vSendStr: String;
vSendBuf : array of Char;
begin
vSendStr := Trim(mmSendMsg.Text);
SetLength(vSendBuf, vSendArySize);
for f1 := 0 to Length(vSendStr)-1 do vSendBuf[f1] := PChar(vSendStr)[f1];
DM.tcClient.SendBuf(PChar(vSendBuf)^, Length(vSendBuf));
mmSocketLog.Lines.Add(String(vSendBuf));
end;
문자 수신시 사용...
procedure TDM.tcThreadRun(Sender: TIdCustomThreadComponent);
const vRcvArySize = 500;
var
vRecvStr: String;
vRecvSize: Integer;
vRecvBuf : array of Char;
begin
if (not tcClient.Connected) then Exit;
SetLength(vRecvBuf, vRcvArySize);
vRecvSize := tcClient.ReceiveBuf(PChar(vRecvBuf)^, vRcvArySize);
vRecvStr := String(vRecvBuf);
fmTCPSocket.mmSocketLog.Lines.Add(vRecvStr);
end;