Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

simple socket with php and delphi?

I have a simple server app written in Delphi using TTCPServer component it has a really basic OnAccept event procedure like below...

"Listener on 127.0.0.1 over port : 10000"

procedure TMainWindow.TcpServerAccept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  S: String;
begin
  S := ClientSocket.Receiveln();
  ShowMessage(S);
  ShowMessage(IntToStr(Length(S)));

  Memo1.Lines.Add(S);
end;

And a simple php page like this...

<?php
$address = '127.0.0.1';
$port = 10000;
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_connect($sock, $address, $port);

socket_set_option($sock, SOL_SOCKET, SO_KEEPALIVE, 1);
$msg = 'Hello...!';
echo socket_write($sock, $msg, strlen($msg));

socket_close($sock);
?> 

Now the problem is when I'm trying to write into the connected socket with php page no error occurred but the received text in the Delphi application (listener) show me the wrong result some thing like this "效汬⹯⸮!"

what should I do ???

like image 368
M.J.Ahmadi Avatar asked Apr 30 '12 06:04

M.J.Ahmadi


1 Answers

This function should serve your needs (I hope)

function UTF8ToUTF16(AUTF8String: RawByteString): String;
begin
  SetCodePage(AUTF8String, 0, False);
  Result := AUTF8String;
end;

Now you should be able to do this:

procedure TMainWindow.TcpServerAccept(Sender: TObject;
  ClientSocket: TCustomIpClient);
var
  S: String;
begin
  S := UTF8ToUTF16(ClientSocket.Receiveln());
  ShowMessage(S);
  ShowMessage(IntToStr(Length(S)));

  Memo1.Lines.Add(S);
end;
like image 101
LaKraven Avatar answered Sep 23 '22 01:09

LaKraven