안녕하세요.
델파이 왕왕처버 입니다.
소켓통신을 하는 다음 코드에서 무엇이 잘못되었는지 결과값이 넘어 오지를 않습니다.
하루종일 헤메고 있습니다. 제발 고수님들의 도움을 바랍니다.
웹에서 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 + '';
Response.content := http_str + '';
end else
begin
Response.content :='연결후 비정상 종료..';
end;
Response.content :=str+'== count = '+InttoStr(i);
end;
end.