Здравствуйте, я впервые тут пишу, сильно не бейте. ) Поставил перед собой задачу написать для начала простое клиент серверное приложнение. Подскажите пожалуйста какой протокол и какие компоненты использовать для организации например чата? Серверная часть должна быть на php на удаленном сервере с постоянным IP/ Клиент - на дельфах.
Лично мне кажется, что для этого тебе подойдут такие языки как JAVA или C#. Возможно и Delphi тоже. В общем тебе нужно капать в сторону сокетов _http://ru.wikipedia.org/wiki/Сокет_(программный_интерфейс). Если что то на JAVA я смогу тебе кинуть пару строк кода. Они 100% рабочие. Сама тестила собственную аську основанную на сокетах.
Так проще 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 -------------------------------------------------------------- Зы: Доберман, тя что забанили?
Если у вас есть php-код с использованием stream_socket_server поделитесь, брал готовый код с мануала - сервер запускается но при попытке принять ответ, приложение дельфи выскакивает с ошибкой "неправильный reply", жаль сечас на работе, вечером обязательно напишу свои исходники на php и delphi а также ошибку
Нет. Я на JAVA и C# пишу + Oracle и MSSQL. php забросила давно. Сори за офтоп, сделала я это для того чтобы автор не ждал от меня кода на php, который я не обещала и не имею. Порты и все дела ты наверника прописываешь. Ждем код, чтобы можно было советовать.
ппц.. можна заросто написать на Delphi клиент, которий будет, например, посилать пост\гет запрос на сервер,.. на сервере php принимает команди.. сам такое делал... главное научитса понимать что такое сокети..
с HTTP проблем не возникало, но тут не получиться организировать мгновенной передачи сообщения, т.к. клиенту нужно будет проверять через некоторые промежутки времени (например 5сек) есть ли для него новое сообщение или нет
и? например: имя юзер: tester клиен шлет запрос: get.php?name=tester get.php: Code: <? if (isset($_GET['name'])) {..... откриваем файл с сообщениями или достаем их из бази .... пусть єсть новое сообщения с текстом: 'hello' тогда в $soobschenia будет hello ..... print $soobschenia; ?> все.. клиен принимает результат: hello.. на делфи\пхп такое не делают.. надо чтоб многновенно работало..
через http тащить информацию??? ХИТРОЗАДО както для клиента на Делфи! 8)))))))))) ... думаю тут все проще пишешь оба сначала на Делфи.... отлаживаешь .... и затем выбираешь язык сервера! ... понятно что на античате тебя поведут дорогой http .... но это как из песни "!...идем дорогой трудной дорогой не простой" 8))) ЧАТ СЕРВЕРУ НЕ НУЖЕН ВЭБСЕРВЕР (имеется ввиду тот у кого на Делфи клиент)!!!
возможно я не совсем правильно сформулировал задачу, нужен не чат(это к примеру), а клиент-приложение, которое висело бы в сети и слушало сервер НА НАЛИЧИЕ сообщения... тоисть тут приемлимо использовать tcp протокол з.ы. и еще вопрос, возможно ли использовать tcp (например с компонента indy idTCPClient) через http прокси?
Ты хакир... Пиздос... На*** такие выебоны если легче сделать CGI на дельфах?[Даже кстати можно на паскале...] И вообще на*** тут HTTP??? Давай тогда через Oscar, заодно и с QIP' ом пообщаемся... И вообще сервак можно на питоне написать... и клиент тоже на питоне... --- Можно на С++, можно на С# клиента написать, да и сервак на С++ можно... Конечно же есть разница на чем писать, но тс вроде попросил сервак на пыхопэ, а клиент на делфи. А по теме, WinSock те в помощь(и два путеводителя это Google и MSDN) Лучше будет писать на сокетах, wininet тут не годится... Если сложно на сокетах, можешь использовать стандартный контрол от Макрософт [подключи в дельфе как активекс] (Microsoft Winsock Control), еще можно через TidTCPClient работать... Вообщем варианты я сказал...дальше ориентируйся на свои возможности и выбирай на свой вкус. Code: [COLOR=Green][SIZE=1][B]P.S. Набери в гугле: Клиент - сервер DELPHI P.p.s. Результаты 1 - 10 из примерно 117 000 для Клиент - сервер DELPHI. (0,23 секунд) [/B][/SIZE][/COLOR] ты прикинь как....
Задача тривиальна, развили тут флейм. Обычный ДДоС червь использует подобную схему, идея есть - реализуй.
Как и обещал, выкладываю: Сервер на php, использую стандартный пример из мануала, при коннекте с клиентом посылает ему сообщение string(39) "Hello! The time is 11/20/2008 10:29 pm " такого вида, + если клиент что то отправляет, то string(23) "You have sent : тут echo клиента " PHP: <?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(чтоб не виснула прога создаем отдельный поток. Code: 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. порт будет открыт, пробуйте
Да, не спорю ! Клиент сервер Дельфи - есть много примеров и ответов! Но поищи мне ответ на мой вопрос где СЕРВЕРОМ есть машина под unix'ом с использованием php
Ура, сделал без потока на стандартном компоненте TcpClient - работает, кроме компоненты тут две кнопки, лейбл, и мемо Code: 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. Будем писать дальше