PDA

Просмотр полной версии : Delphi + PHP (клиент-сервер)


200 OK
20.11.2008, 17:54
Здравствуйте, я впервые тут пишу, сильно не бейте. )

Поставил перед собой задачу написать для начала простое клиент серверное приложнение. Подскажите пожалуйста какой протокол и какие компоненты использовать для организации например чата? Серверная часть должна быть на php на удаленном сервере с постоянным IP/ Клиент - на дельфах.

FlyBird
20.11.2008, 18:08
Лично мне кажется, что для этого тебе подойдут такие языки как JAVA или C#.
Возможно и Delphi тоже. В общем тебе нужно капать в сторону сокетов
_http://ru.wikipedia.org/wiki/Сокет_(программный_интерфе с).
Если что то на JAVA я смогу тебе кинуть пару строк кода. Они 100% рабочие. Сама тестила собственную аську основанную на сокетах.

ronald
20.11.2008, 18:12
omg...
Куда катится мир?
А слабо встроить код из дельфи в страничку и держать там?:
1. Создаёшь ActiveX форму
2. Project -> Web Deployment Options
3. Пишешь нужный код
4. Project-> Web Deploy
5. Подключить готовое сам, думаю разберёшься, если что постучи в асю
Инфа по теме:
http://www.codenet.ru/progr/other/delphocx.php
http://www.codenet.ru/progr/delphi/ax_ie.php
--------------------------------------------------------------
Зы: Доберман, тя что забанили? :confused:

200 OK
20.11.2008, 18:15
Лично мне кажется, что для этого тебе подойдут такие языки как JAVA или C#.
Возможно и Delphi тоже. В общем тебе нужно капать в сторону сокетов
_http://ru.wikipedia.org/wiki/Сокет_(программный_интерфе с).
Если что то на JAVA я смогу тебе кинуть пару строк кода. Они 100% рабочие. Сама тестила собственную аську основанную на сокетах.

Если у вас есть php-код с использованием stream_socket_server поделитесь, брал готовый код с мануала - сервер запускается но при попытке принять ответ, приложение дельфи выскакивает с ошибкой "неправильный reply", жаль сечас на работе, вечером обязательно напишу свои исходники на php и delphi а также ошибку

FlyBird
20.11.2008, 18:34
Нет. Я на JAVA и C# пишу + Oracle и MSSQL.
php забросила давно.
Сори за офтоп, сделала я это для того чтобы автор не ждал от меня кода на php, который я не обещала и не имею. Порты и все дела ты наверника прописываешь. Ждем код, чтобы можно было советовать.

eLWAux
20.11.2008, 18:46
ппц..
можна заросто написать на Delphi клиент, которий будет, например, посилать пост\гет запрос на сервер,.. на сервере php принимает команди..
сам такое делал...
главное научитса понимать что такое сокети..

200 OK
20.11.2008, 18:51
ппц..
можна заросто написать на Delphi клиент, которий будет, например, посилать пост\гет запрос на сервер,.. на сервере php принимает команди..
сам такое делал...
главное научитса понимать что такое сокети..


с HTTP проблем не возникало, но тут не получиться организировать мгновенной передачи сообщения, т.к. клиенту нужно будет проверять через некоторые промежутки времени (например 5сек) есть ли для него новое сообщение или нет

eLWAux
20.11.2008, 18:55
и?
например:

имя юзер: tester
клиен шлет запрос: get.php?name=tester

get.php:
<?
if (isset($_GET['name']))
{.....
откриваем файл с сообщениями
или достаем их из бази
....
пусть єсть новое сообщения с текстом: 'hello'
тогда в $soobschenia будет hello
.....
print $soobschenia;
?>

все.. клиен принимает результат: hello..
на делфи\пхп такое не делают.. надо чтоб многновенно работало..

Delimiter
20.11.2008, 18:57
через http тащить информацию??? ХИТРОЗАДО както для клиента на Делфи! 8))))))))))

... думаю тут все проще пишешь оба сначала на Делфи.... отлаживаешь .... и затем выбираешь язык сервера!

... понятно что на античате тебя поведут дорогой http .... но это как из песни "!...идем дорогой трудной дорогой не простой" 8)))


ЧАТ СЕРВЕРУ НЕ НУЖЕН ВЭБСЕРВЕР (имеется ввиду тот у кого на Делфи клиент)!!!

200 OK
20.11.2008, 22:21
ЧАТ СЕРВЕРУ НЕ НУЖЕН ВЭБСЕРВЕР (имеется ввиду тот у кого на Делфи клиент)!!!
возможно я не совсем правильно сформулировал задачу, нужен не чат(это к примеру), а клиент-приложение, которое висело бы в сети и слушало сервер НА НАЛИЧИЕ сообщения... тоисть тут приемлимо использовать tcp протокол

з.ы. и еще вопрос, возможно ли использовать tcp (например с компонента indy idTCPClient) через http прокси?

_Kris_
20.11.2008, 23:22
omg...
Куда катится мир?
А слабо встроить код из дельфи в страничку и держать там?:
1. Создаёшь ActiveX форму
2. Project -> Web Deployment Options
3. Пишешь нужный код
4. Project-> Web Deploy
5. Подключить готовое сам, думаю разберёшься, если что постучи в асю
Инфа по теме:
http://www.codenet.ru/progr/other/delphocx.php
http://www.codenet.ru/progr/delphi/ax_ie.php
--------------------------------------------------------------
Зы: Доберман, тя что забанили? :confused:

Ты хакир...
Пиздос...
На*** такие выебоны если легче сделать CGI на дельфах?[Даже кстати можно на паскале...]
И вообще на*** тут HTTP???
Давай тогда через Oscar, заодно и с QIP' ом пообщаемся...
И вообще сервак можно на питоне написать...
и клиент тоже на питоне...
---
Можно на С++, можно на С# клиента написать, да и сервак на С++ можно...

Конечно же есть разница на чем писать, но тс вроде попросил сервак на пыхопэ, а клиент на делфи.
А по теме, WinSock те в помощь(и два путеводителя это Google и MSDN)
Лучше будет писать на сокетах, wininet тут не годится...
Если сложно на сокетах, можешь использовать стандартный контрол от Макрософт [подключи в дельфе как активекс] (Microsoft Winsock Control), еще можно через TidTCPClient работать...
Вообщем варианты я сказал...дальше ориентируйся на свои возможности и выбирай на свой вкус.

P.S. Набери в гугле: Клиент - сервер DELPHI
P.p.s. Результаты 1 - 10 из примерно 117 000 для Клиент - сервер DELPHI. (0,23 секунд)
ты прикинь как....

0verbreaK
20.11.2008, 23:49
Задача тривиальна, развили тут флейм.
Обычный ДДоС червь использует подобную схему, идея есть - реализуй.

200 OK
20.11.2008, 23:57
Как и обещал, выкладываю:

Сервер на php, использую стандартный пример из мануала, при коннекте с клиентом посылает ему сообщение string(39) "Hello! The time is 11/20/2008 10:29 pm " такого вида, + если клиент что то отправляет, то string(23) "You have sent : тут echo клиента "


<?php

$master = array();
$socket = stream_socket_server("tcp://localhost:10001", $errno, $errstr);
if (!$socket) {
echo "$errstr ($errno)<br />\n";
} else {
$master[] = $socket;
$read = $master;
while (1) {
$read = $master;
$mod_fd = stream_select($read, $_w = NULL, $_e = NULL, 5);
if ($mod_fd === FALSE) {
break;
}
for ($i = 0; $i < $mod_fd; ++$i) {
if ($read[$i] === $socket) {
$conn = stream_socket_accept($socket);
fwrite($conn, "Hello! The time is ".date("n/j/Y g:i a")."\n");
$master[] = $conn;
} else {
$sock_data = fread($read[$i], 1024);
var_dump($sock_data);
if (strlen($sock_data) === 0) { // connection closed
$key_to_del = array_search($read[$i], $master, TRUE);
fclose($read[$i]);
unset($master[$key_to_del]);
} else if ($sock_data === FALSE) {
echo "Something bad happened";
$key_to_del = array_search($read[$i], $master, TRUE);
unset($master[$key_to_del]);
} else {
echo "The client has sent :"; var_dump($sock_data);
fwrite($read[$i], "You have sent :[".$sock_data."]\n");
fclose($read[$i]);
unset($master[array_search($read[$i], $master)]);
}
}
}
}
}
?>



Далее часть на дельфах

Создаю форму с елементами Button1, Memo1, компонентами IdTCPClient1, и IdThreadComponent1(чтоб не виснула прога создаем отдельный поток.


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdThreadComponent, StdCtrls, IdComponent,
IdTCPConnection, IdTCPClient;

type
TForm1 = class(TForm)
Button1: TButton;
IdThreadComponent1: TIdThreadComponent;
IdTCPClient1: TIdTCPClient;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure IdThreadComponent1Run(Sender: TIdThreadComponent);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
IdThreadComponent1.Start;
end;

procedure TForm1.IdThreadComponent1Run(Sender: TIdThreadComponent);
begin
IdTCPClient1.Host:='92.63.110.20';
IdTCPClient1.Port:=10001;
IdTCPClient1.Connect;
IdTCPClient1.SendCmd('Heloo serv',Memo1.Text);
end;

end.

Тоисть после нажатия Button1, мы должны отправить сообщение Heloo serv, и получить в ответ в Memo1
Вместо радости получаю
Исключение класса EidException с сообщением 'Reply Code is not valid :Hel'.
Где Hel это по всей видимости ответ сервера "Hello! The t ......

Помогите йопт

p.s. порт будет открыт, пробуйте

200 OK
21.11.2008, 00:01
P.S. Набери в гугле: Клиент - сервер DELPHI
P.p.s. Результаты 1 - 10 из примерно 117 000 для Клиент - сервер DELPHI. (0,23 секунд)
ты прикинь как....

Да, не спорю ! Клиент сервер Дельфи - есть много примеров и ответов! Но поищи мне ответ на мой вопрос где СЕРВЕРОМ есть машина под unix'ом с использованием php

200 OK
21.11.2008, 04:09
Ура, сделал без потока на стандартном компоненте TcpClient - работает, кроме компоненты тут две кнопки, лейбл, и мемо

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Sockets;

type
TForm1 = class(TForm)
TcpClient1: TTcpClient;
Button1: TButton;
Label1: TLabel;
Button2: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure TcpClient1Connect(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
TcpClient1.RemoteHost:='92.63.110.20';
TcpClient1.RemotePort:='10001';
TcpClient1.Connect;


end;

procedure TForm1.TcpClient1Connect(Sender: TObject);
begin
Label1.Caption:='Is connected';
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
TcpClient1.Open;
TcpClient1.Sendln('Hello');
Memo1.Text:=TcpClient1.Receiveln();
TcpClient1.Close;
end;

end.



Будем писать дальше