Q&A

  • 서버와 클라이언트간의 메시지 교환에 대해..
안녕하세요.



소켓을 이용한 서버 & 클라이언트 통신에 있어서,

아래와 같이..

var



Form1:TForm1;



data0:array[0..11] of byte = ($7f,$fe,$00,$0C,$00,$00,$00,$00,$00,$80,$00,$09);

data1:array[0..11] of byte = ($7f,$fe,$00,$0C,$00,$00,$00,$00,$00,$81,$01,$0b);

data2:array[0..11] of byte = ($7f,$fe,$00,$0c,$00,$00,$00,$00,$00,$82,$02,$0d);



보낼 데이터를 배열로 정의 하였습니다.

위의 데이터를 socket.sendbuf(data0,12)....이런 형식으로 서버에서 클라이언트로

전송하였습니다. 헥사값으로 전송이 되어지겠죠.

아래와 같이 구성하였습니다.



0번 버튼을 누르면, data0 1번 버튼을 누르면 data1, 2번 버튼을 누르면 data2가 전송되게끔요..



procedure TForm1.Button0Click(Sender: TObject);

begin

memo1.Lines.Add('0');

serversocket1.Socket.Connections[0].sendbuf(data0,12)

end;



procedure TForm1.Button1Click(Sender: TObject);

begin

memo1.Lines.Add('1');

serversocket1.Socket.Connections[0].sendbuf(data1,12)

end;



procedure TForm1.Button2Click(Sender: TObject);

begin

memo1.Lines.Add('2');

serversocket1.Socket.Connections[0].sendbuf(data2,12)

end;





근데..현재 제가 테스트하고 있는 바에 의하면, 이와 같이 서버에서 장치로 데이터가 전송이 된 후..

정상적으로 장치에서 메시지를 받으면, 잘 받았다는 응답메시지로 수초 후에 'B'라는 특정 문자를 서버특 리스트 박스로 전송하게 하였습니다.

물론 어떠한 데이터를 전송하여도 올바르게 전송만되면 동일하게 'B'라는 메시지를 서버측 리스트 박스에 전송합니다. 서버측 리스트 박스에는 문자 B가 당연히 나타나겠죠.



그런데.. 이번에 제가 구현하고 싶은 것은 data0라는 배열 데이터를 장치로 보내었을때 올바르게 전송되었다는 응답 메시지를 data0라는 메시지로 서버측의 리스트 박스에 표시하려고 시도해보았는데요..



위에서 data0:array[0..11] of byte = ($7f,$fe,$00,$0C,$00,$00,$00,$00,$00,$80,$00,$09); 와 같이 헥사 데이터로 표현되었습니다.



서버에서 송신한 데이터가 장치에 정확히 전송되면,,장치쪽의 더미터미널(dummy terminal)에서 확인한 결과 전송된 데이터는



'[7f][fe][00][0c][00][00][00][00][00][82][02][0d]'와 같은 헥사값으로 표시됩니다.





제가 궁금한 것은

이와 같이 [7f][fe][00][0c][00][00][00][00][00][82][02][0d]와 동일한 데이터를 똑같은 형태로 으로 서버의 리스트 박스에 표시되게 해주려고 합니다.

즉 장치에서 보낸 응답 메시지를 위와 같은 [7f][fe][00][0c][00][00][00][00][00][82][02][0d] 형식으로 전송하고 싶은것이죠.



근데 잘 안되네요.. 에러만 뜨고 .



($7f,$fe,$00,$0C,$00,$00,$00,$00,$00,$80,$00,$09) 이와 같은 메시지 포맷으로 응답 메시지를 서버측으로 날려주려면 .. 어떻게 구현해야되는지 잘 모르겠습니다.



장치와 GUI간의 헥사데이터 값을 주고 받는 것을 어떻게 구현해야 좋을지

고수님들의 조언 부탁드립니다.



그럼..



















0  COMMENTS