![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 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; ![]() |
![]() |
![]() |
![]() |
#2 |
Инженер ИС
Старожил
Регистрация: 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) Мир духу его
|
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сервер клиент | 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 |