안녕하세요!
서버에서 클라이언트로 메세지를 보내면 클라이언트에서
그 메세지를 처리하고 서버로 처리가 끝났다는 메세지를
보냅니다.
서버에서는 클라이언트에서 보낸 메세지를 구분하여 다음 메세지를
보내는 식으로 프로그램하였습니다.
클라이언트에서 보내는 메세지는 두가지로 메뉴를 핸들하는 메뉴의 Tag메세지와
서버에서 보낸 데이타를 처리가 끝났을때 보내는 메세지입니다.
그런데, 메뉴의 Tag메세지를 보내면 처리 메세지도 동시에 보내집니다.
메뉴의 Tag메세지 처리가 끝난다음 처리 메세지를 보낼수는 없는지요.
클라이언트
메뉴 루틴
ClientSocket.Socket.SendText(IntToStr(TMenuItem(Sender).Tag)); // Tag : 0 ~ 5
메세지 루틴
ClientSocket.Socket.SendText('ReceiveOK');
서버
Str := Socket.ReceiveText;
if sStr = 'ReceiveOK' then NextMessageSend
else MenuProcess;
위와 같이 처리를 하려고 하는데, ReceiveText를 하면
'3ReceiveOK'또는 'ReceiveOK3'식으로 됩니다.
조언 부탁드립니다...
먼저 전역적인 Boolean형 변수를 선언하시구요.
만약 이 변수가 Recieved라고 한다면..
Recieved := False;
ClientSocket.Socket.SendText(IntToStr(TMenuItem(Sender).Tag));
repeat
Application.ProcessMessages;
until Recieved;
ClientSocket.Socket.SendText('ReceiveOK');
이것을 해주시고 소켓의 OnRead였나..?? 그 들어오는 이벤트에서..
그것에 대한 응답이 있으면 Recieved:=True; 를 주면 됩니다.
그 응답이 올때까지 진행하지 않게 되는것이죠.
만약 응답이 계속 안오면 계속 멈춰 있으므로 타이머 하나를 두어서 관리하는편이 안전합니다.
그 타이머로 일정시간동안 오지 않으면 계속 진행을 하게 한다던가 에러를 낸다던가.. 그렇게 말이죠.
최정원 wrote:
> 안녕하세요!
> 서버에서 클라이언트로 메세지를 보내면 클라이언트에서
> 그 메세지를 처리하고 서버로 처리가 끝났다는 메세지를
> 보냅니다.
> 서버에서는 클라이언트에서 보낸 메세지를 구분하여 다음 메세지를
> 보내는 식으로 프로그램하였습니다.
> 클라이언트에서 보내는 메세지는 두가지로 메뉴를 핸들하는 메뉴의 Tag메세지와
> 서버에서 보낸 데이타를 처리가 끝났을때 보내는 메세지입니다.
> 그런데, 메뉴의 Tag메세지를 보내면 처리 메세지도 동시에 보내집니다.
> 메뉴의 Tag메세지 처리가 끝난다음 처리 메세지를 보낼수는 없는지요.
>
> 클라이언트
> 메뉴 루틴
> ClientSocket.Socket.SendText(IntToStr(TMenuItem(Sender).Tag)); // Tag : 0 ~ 5
> 메세지 루틴
> ClientSocket.Socket.SendText('ReceiveOK');
>
> 서버
> Str := Socket.ReceiveText;
>
> if sStr = 'ReceiveOK' then NextMessageSend
> else MenuProcess;
>
> 위와 같이 처리를 하려고 하는데, ReceiveText를 하면
> '3ReceiveOK'또는 'ReceiveOK3'식으로 됩니다.
> 조언 부탁드립니다...