Q&A

  • 소켓통신관련 질문입니다.
안녕하세요.

델파이 왕왕처버 입니다.

소켓통신을 하는 다음 코드에서 무엇이 잘못되었는지 결과값이 넘어 오지를 않습니다.

하루종일 헤메고 있습니다. 제발 고수님들의 도움을 바랍니다.



웹에서 encode=CMD$ 이렇게 넘겨주면 A0000004CMD$ 의 패킷을 유닉스서버에 넘겨주고 이에따라 처리가 되어 값을 넘겨받는 형식입니다.



unit gate;



interface



uses

Windows, Messages, SysUtils, Classes, HTTPApp, Db, DBClient, ScktComp,

Psock;



type

Tgeteway = class(TWebModule)

sk_gate: TClientSocket;

procedure getewayWebActionItem1Action(Sender: TObject;

Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

private

{ Private declarations }

public

{ Public declarations }

end;



var

geteway: Tgeteway;



implementation



{$R *.DFM}



procedure Tgeteway.getewayWebActionItem1Action(Sender: TObject;

Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

var

rtn_url, encode, str, str_buf, http_str, buf, tmp : String;

i : integer;

begin



sk_gate.Address := '211.233.XXX.XXX';

sk_gate.Port := 11111;

sk_gate.Active := True;



try

sk_gate.Socket.Connect(12345);

except

end;



encode := Request.QueryFields.Values['encode'];



Sleep(1000);



if sk_gate.Socket.Connected = True then

begin

tmp := IntToStr(length(encode));



for i := 1 to 7-length(tmp) do

begin

str := str + '0';

end;}



encode := 'A' + str + tmp + encode;

try

sk_gate.Socket.SendText(encode);

except

end;



str := '';



while true do

begin

try

str_buf := sk_gate.Socket.ReceiveText;

except

end;

str := str + str_buf;

if length(str) > 8 then

begin

tmp := copy(str,2,7);

if StrToInt(tmp) <= (length(str)-8) then break;

end;

sleep(10);

end;



sk_gate.Socket.Disconnect(12345);

sk_gate.Active := False;



buf := Request.QueryFields.Values['buf'];

rtn_url := Request.QueryFields.Values['rtn_url'];



delete(str,1,8);



http_str := 'Movie Stock';

http_str := http_str + '';

http_str := http_str + '
';

http_str := http_str + '';

http_str := http_str + '';

http_str := http_str + '
';

Response.content := http_str + '';



end else

begin

Response.content :='연결후 비정상 종료..';

end;



Response.content :=str+'== count = '+InttoStr(i);

end;



end.

0  COMMENTS