do. Socket. Connections [i]. SendText ( # N ) ;. Lines. Add (timetostr (now) + laquo ;: + Користувач підключився. У мережі: + inttostr (ServerSocket1. Socket. ActiveConnections));
//Від сервера відключився клієнт (OnClientDisconnect)
var i: Integer;
{Хтось приєднався або від'єднався? Немає проблем! Запитуємо у всіх
юзерів їх імена}. Items. Clear; i:=0 to ServerSocket1. Socket. ActiveConnections - 1 do. Socket. Connections [i]. SendText ( # N ) ;. Lines. Add (timetostr (now) + laquo ;: + Користувач відключився. У мережі: + inttostr (ServerSocket1. Socket. ActiveConnections));
//Сервер отримує дані від клієнта (OnClientRead)
var s, s1: string ;: Integer ;: Integer ;: Pointer ;: string ;: string;
{зберігаємо в s надіслану нам рядок}:=Socket. ReceiveText;
{Якщо хтось шле файл} Copy (s, 1,2)= # F then (s, 1,2) ;:=s;
{Процедура створення файлу} _create (filename) ;;;
{Хтось хоче переслати всім файл} Copy (s, 1,2)= # S then (s, 1,2) ;. Destroy; i:=0 to ServerSocket1. Socket. ActiveConnections - 1 do. Socket. Connections [i]. SendText ( # F + s) ;. Socket. Connections [i]. SendStream (TFileStream. Create ( temp/ + s, fmOpenReadWrite or fmShareDenyWrite)) ;;;;
{хтось шле своє ім'я} Copy (s, 1,2)= # N then (s, 1,2);
{Додаємо його в юзер лист}. Items. Add (s);
{Записуємо в s команду для посилки нового списку юзерів}:= # U raquo ;; i:=0 to ListBox1. Items. Count - 1 do:=s + ListBox1. Items [i] + laquo ;; raquo ;;
{. і розсилаємо цей список усім клієнтам} i:=0 to ServerSocket1. Socket. ActiveConnections - 1 do. Socket. Connections [i]. SendText (s) ;;;
{Якщо хтось кинув повідомлення - розсилаємо його всім клієнтам} (Copy (s, 1,2)= # M ) or (Copy (s, 1,2)= # P ) then begini:=0 to ServerSocket1. Socket. ActiveConnections - 1 do. Socket. Connections [i]. SendText (s) ;;;;
//Отримання файлу (Файловий сервер)
var s, s1: string ;: Integer ;: Integer ;: Pointer ;:=Socket. ReceiveLength; (Bfr, iLen) ;. ReceiveBuf (Bfr ^, iLen) ;. Write (Bfr ^, iLen); (Bfr) ;;;.
2.4 Вихідний код Клієнта відповідальний за мережеву взаємодію
//Кнопка підключення до сервера
var, port: string;
{Перевірка чи введені дані (ip, port, nickname)} (edit2. Text= ) or (edit3. Text= ) or (edit4. Text= ) then. Panels [0]. Text:= Заповніть всі поля
{Якщо вже є підключення} ClientSocket1. Active then:=edit2. Text ;:=edit3. Text ;:=edit4. Text ;. Host:=host ;. port:=strtoint (port) ;. Open ;. Host:=ClientSocket1. host ;. port:=ClientSocket1. port + 50 ;. Open;
{Якщо немає підключення}. Close ;. Close ;:=edit2. Text ;:=edit3. Text ;:=edit4. Text ;. Host:=host ;. Port:=StrToInt (port) ;:=edit4. Text ;. Open ;. Host:=ClientSocket1. host ;. port:=ClientSocket1. port + 50 ;. Open ;;;
//Кнопка відключення від сервера
Begin
{Закриття з'єднання}. Close ;. Close ;;
//Команди від сервера
var s, from_, to_: string ;: integer;
{присвоюємо s отриману від сервера рядок}:=Socket. ReceiveText; Copy (s, 1,2)= # F then (s, 1,2) ;:=TFileStream. Create ('temp ' + s, fmCreate or fmShareDenyWrite) ;;;
{Якщо сервер посилає нам Новий Нік} Copy (s, 1,2)= # K then begin (s, 1,2); copy (s, 1, pos ( laquo ;; , s) - 1)=NickName then begin (s, 1, pos ( laquo ;; , s)); ( Адміністратор змінив ваше ім'я на: - + S) ;. Text:=S ;. Click ;. Click ;;;;;
{Якщо сервер посилає нам User List} Copy (s, 1,2)= # U then begin (s, 1,2) ;:=0;
{Чистимо ListBox1}. Items. Clear;
{Додаємо по одному користувачеві в список. Імена користувачів розділені знаком laquo ;; } Pos ( laquo ;; , s) gt; 0 do begin. Items. Add (Copy (s, 1, Pos ( laquo ;; , s) - 1)); (s, 1, Pos ( laquo ;; , s)) ;;;;
{Якщо нам прислали загальне повідомлення (видиме для всіх користувачів)} Copy (s, 1,2)= # M then begin (s, 1,2);
{Додаємо його в Memo1}. Lines. Insert (0, Copy (s, 1, Pos ( laquo ;; , s) - 1) + gt; + Copy (s, Pos ( laquo ;; , s) + 1, Length ( s) - Pos ( laquo ;; , s))) ;;;
{Якщо нам прислали запит на наше і...