![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
||||
|
||||
|
Два компьютера. (допустим) Один компьютер x, а другой y. На обоих есть и запущена эта программы. Как передавать на с одной программы компьютера x другой компьютера y, и обратно? Что-то типа чато, но передаваться будут координаты.
|
|
#2
|
||||
|
||||
|
Я делаю это с помощью компонента TSocketServer/Client. В Delphi7 установить: delphi7\bin\dclsockets70.bpl. Компоненты>Установить пакет, в окне кликай на "Добавть" ищи по этому пути. После установки они появятся во вкладке Internet.
сервер: Код:
.....
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket); //Принятие текста
var s:string;
begin
s:=Socket.ReceiveText;
ShowMessage(s);
end;
...
procedure TForm1.Button1Click(Sender: TObject); //Посылка всем
var i:integer; s:string;
begin
s:='Delphi';
for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections[i].SendText(s);
end;
...Код:
.... procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket); //Принятие от сервера var s:string; begin s:=Socket.ReceiveText; ShowMessage(s); end; ... procedure TForm1.Button1Click(Sender: TObject); //Посылка var s:string; begin s:='Delphi'; ClientSocket1.Socket.SendText(s); end; ... Но это дело каждого... |
|
#3
|
||||
|
||||
|
Я правильно понял, что для сервера одна прога , а для клиенты другая?
|
|
#4
|
|||
|
|||
|
Не совсем. Тебе никто не мешает и сервер и клиента реализовать в одной программе. Более того, у тебя одна прога может слать сама себе сообщения.
ЗЫ. Я бы делал через Indy. |
|
#5
|
||||
|
||||
|
А как через Indy? И можно ли так, чтобы я как бы создавал сервак, а мой друг подключался и мы играли? (я делаю мини игру)
|
|
#6
|
|||
|
|||
|
Ну если тебе передавать какие-то данные просто, то используй TCmdTCPServer/TCmdTCPClient (кажется так называются). Они удобны тем, что ты просто задаешь команды и работвешь уже с данными. Если будешь передавать бинарные данные, то запакуй их в Base64 (Компоненты соответсвующие у индюка есть). В программе при старте выбираешь режим - клиент или сервер. Все.
Да, демки можно посмотреть на www.indyproject.org. |
|
#7
|
||||
|
||||
|
Я не понял что на http://www.indyproject.org/index.en.aspx надо делать, там все на английском. Хотя у меня и есть Сократ Персональный 4.1, но он ужасно переводит.
А можно чтобы был указан IP в компоненте и ему отправлять? А то например так информацию передает наверное всем программа, которые использую эти компоненты. |
|
#8
|
||||
|
||||
|
TSocketServer/Client надо ставить свойство Active:=true???
|
|
#10
|
||||
|
||||
|
Попробую сделать с ботами...
|
|
#11
|
|||
|
|||
|
вопрос: а через нет чтобы такой чат организовать надо иметь фиксированный ip адресс или он просто по имени найдет или как вообще?
|
|
#12
|
||||
|
||||
|
В сокете есть Port, вот ему надо присвоить значение.
|
|
#13
|
||||
|
||||
|
Я сделал простенький чат, компилировал его, отправил exe знакомому и при подключении к серверу у него какая-то ошибка, что типа сервак не найден чтоли... помогите, я думаю у меня не создается сервак....
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ActnList, StdCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
ServerSocket1: TServerSocket;
Edit1: TEdit;
Button1: TButton;
Memo1: TMemo;
Button2: TButton;
Edit2: TEdit;
ActionList1: TActionList;
Action1: TAction;
Label1: TLabel;
Edit3: TEdit;
Button3: TButton;
procedure Button1Click(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
this: string='client';
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Port:=strtoint(edit1.Text);
ClientSocket1.Open;
end;
procedure TForm1.ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText)
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i: integer;
begin
if this='server' then begin
for i := 0 to ServerSocket1.Socket.ActiveConnections-1 do
ServerSocket1.Socket.Connections[i].SendText(Edit2.Text);
Memo1.lines.Add('['+Edit3.Text+'] '+Edit2.Text);
Edit2.Clear; end
else
if this='client' then begin
ClientSocket1.Socket.SendText(edit2.text);
Memo1.lines.Add('['+Edit3.Text+'] '+Edit2.Text);
edit2.clear;
end;
end;
procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Memo1.Lines.Add(Socket.ReceiveText);
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
// ServerSocket1.Port:=strtoint(edit1.text);
ServerSocket1.Open;
ServerSocket1.Active:=true;
this:='server';
end;
end. |