Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.08.2009, 17:19   #1
igni
Пользователь
 
Регистрация: 08.08.2009
Сообщений: 12
По умолчанию Клиент-Сервер игра по Сети

Всем привет
Я решил сделать игру Клиент-Сервер, но есть одна проблема, не могу сделать так что-бы каждый при входе вводил логин и пароль, а сервер отправлял после входа ему количество Money например...

Сервер

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Button1: TButton;
ServerSocket1: TServerSocket;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
procedure ServerSocket1ClientRead(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ServerSocket1.Active := False;
ServerSocket1.Close;
end;

procedure TForm1.ServerSocket1ClientRead(Send er: TObject;
Socket: TCustomWinSocket);
var
S: String;
I: Integer;
begin

S := InTtoStr(Socket.SocketHandle) + '>' + Socket.ReceiveText;
ListBox1.Items.Add(S);

For i := 0 to ServerSocket1.Socket.ActiveConnecti ons - 1 do

if ServerSocket1.Socket.Connections[i].SocketHandle <> Socket.SocketHandle then

ServerSocket1.Socket.Connections[i].SendText(S);

end;

end.

Клиент:

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Button1: TButton;
ClientSocket1: TClientSocket;
ListBox1: TListBox;
Button2: TButton;
Edit3: TEdit;
Button3: TButton;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Timer1: TTimer;
Edit4: TEdit;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
procedure Button2Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Disconnect(Sender: TObject;
Socket: TCustomWinSocket);
procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
ErrorEvent: TErrorEvent; var ErrorCode: Integer);
procedure Timer1Timer(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
Money: integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Address := Edit1.Text;
ClientSocket1.Port := StrToInt(Edit2.text);
ClientSocket1.Active := True;
Timer1.Enabled:=true;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
ClientSocket1.Active := False;
ClientSocket1.Close;
Close;

end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
Socket: TCustomWinSocket);
begin
Listbox1.Items.Add(Socket.ReceiveTe xt);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin

If Edit1.Text <> '' then
ClientSocket1.Socket.SendText(Edit3 .text);
Edit3.Clear;

end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
Label6.Caption:='Подключен';
end;

procedure TForm1.ClientSocket1Disconnect(Send er: TObject;
Socket: TCustomWinSocket);
begin
Label6.Caption:='Не Подключен';
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
Label6.Caption:='Ошибка Соединения';
end;

подскажите как реализовать это?
igni вне форума Ответить с цитированием
Старый 09.08.2009, 18:26   #2
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Вам сначала бы понять в принципе алгоритмы работы системы "Клиент-Сервер". Это в первую очередь последовательность запросов и ответов. Берем листок бумаги и пишем:

1) Запускается сервер;
2) Сервер ожидает подключения клиентов;
3) Подключается некоторый клиент;
4) Сервер отправляет клиенту запрос "кто ты такой", и ждет ответ в виде логина и пароля;
5) Сервер принимает логин и пароль неопределенным пакетом;
6) Сервер проверяет подлинность пакета, и выделяет из него логин и пароль;
7) Сервер проверяет список пользователей и паролей, если логин или пароль не верные, он отправляет сообщение клиенту. Если подряд 5 неправильных вводов, сервер отключает пользователя.
8) Сервер впускает пользователя в игру (логин и пароль верные), ищет игровые данные, отправляет клиенту пакет с его параметрами.
9) Сервер отключает клиента по его запросу "Выхожу из игры", или при сбое канала;
10) Сервер рассылает всем пользователям (если нужно), что некоторый игрок покинул игру.

Вот это уясните, и дальше будет все просто. Рекомендую в качестве исходного материала вот этот чат: http://pblog.ru/?p=100 обсуждения и модернизация тут: http://programmersforum.ru/showthread.php?t=12574 может понадобится.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сервер клиент Dr.zlo Работа с сетью в Delphi 13 15.06.2009 21:43
Возможно-ли Клиент-серверное приложение типа Клиент(Pascal) а сервер(CGI)? Demol Работа с сетью в Delphi 1 21.04.2009 16:18
Клиент-сервер-клиент Кронос Работа с сетью в Delphi 3 24.08.2007 07:57
Клиент-Сервер snakesoft Работа с сетью в Delphi 8 20.07.2007 17:34
Клиент-сервер Scorpio Работа с сетью в Delphi 6 13.02.2007 22:57