
30.06.2010, 15:47
|
Прохожий
|
|
Регистрация: 15.06.2010
Сообщения: 10
Репутация: 10
|
|
пробовал оба.че т не идет у мя(
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ScktComp, DateUtils, StdCtrls;
type
TForm1 = class(TForm)
ServerSocket1: TServerSocket;
ListBox1: TListBox;
procedure FormCreate(Sender: TObject);
procedure ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
private
{ Private declarations }
public
{ Public declarations }
end;
TServerThread = class(TServerClientThread) // клас многопоточного сервера
protected
procedure ClientExecute; override;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TServerThread.ClientExecute;
var
bufIn: array [0..65535] of Char; // буфер для входящих данных
fRSData: TWinSocketStream; // клиентский поток
buf_size: integer; // размер входящего буфера
bufOut: TMemoryStream; // приёмный буфер в памяти
begin
bufOut := TMemoryStream.Create; // создаём приёмный буфер в памяти
inherited // наследуем все свойства от родителя
FreeOnTerminate := True; // освобождать память при завершении потока
fRSData := TWinSocketStream.Create(ClientSocket, 100000); // создаём клиентский
try
while (not Terminated) And (ClientSocket.Connected) do // работаем пока есть коннект или пока не закрылись
begin
if fRSData.WaitForData(12000) = False then Break; // если за 2 минуты ничего не пришло, закрывает поток
buf_size := ClientSocket.ReceiveLength; // размер входящего буфера
if buf_size = 0 then Break; // если входящий буфер = 0, то закрываемся
fRSData.ReadBuffer(bufIn,buf_size); // читаем буфер
BufOut.Write(bufIn,buf_size); // пишем буфер в память, для последующего сохранения в файл
bufOut.SaveToFile('LogForServer.txt'); // сохраняем лог
bufOut.Free; // освобождаем память от данных
end;
except
on e:exception do // если произошла ошибка
begin
ClientSocket.Close; // закрываем соединение с клиентом
Terminate; // остановка
end;
end;
fRSData.Free; // освобождаем память от клиентского потока
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ServerSocket1.Active := True; // активируем серверную часть
end;
procedure TForm1.ServerSocket1GetThread(Sender: TObject;
ClientSocket: TServerClientWinSocket;
var SocketThread: TServerClientThread);
begin
SocketThread := TServerThread.Create(False, ClientSocket); // создаём отдельный поток
SocketThread.Priority := tpLower; // ставим ему низкий приоритет, высокий не нужен
end;
end.
|