Форум: "Сети";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизВопрос по Demos Internet NetChat Найти похожие ветки
← →
GuAV © (2006-01-10 12:32) [0]Зачем там поток TClientDataThread ?
Почему нельзя сразу в мемо ?
И почему нельзя использовать на одной машине только TTcpClient, а на другой - только TTcpServer для данной задачи ?// you must create your own thread to synch
// writing to a gui component
TClientDataThread = class(TThread)
private
public
ListBuffer :TStringList;
TargetList :TStrings;
procedure synchAddDataToControl;
constructor Create(CreateSuspended: Boolean);
procedure Execute; override;
procedure Terminate;
end;
...
procedure TForm1.TcpServer1Accept(sender: TObject;
ClientSocket: TCustomIpClient);
var
s: string;
DataThread: TClientDataThread;
begin
// create thread
DataThread:= TClientDataThread.Create(true);
// set the TagetList to the gui list that you
// with to synch with.
DataThread.TargetList := memRecv.lines;
// Load the Threads ListBuffer
DataThread.ListBuffer.Add("*** Connection Accepted ***");
DataThread.ListBuffer.Add("Remote Host: " + ClientSocket.LookupHostName(ClientSocket.RemoteHost) +
" (" + ClientSocket.RemoteHost + ")");
DataThread.ListBuffer.Add("===== Begin message =====");
s := ClientSocket.Receiveln;
while s <> "" do
begin
DataThread.ListBuffer.Add(s);
s := ClientSocket.Receiveln;
end;
DataThread.ListBuffer.Add("===== End of message =====");
// Call Resume which will execute and synch the
// ListBuffer with the TargetList
DataThread.Resume;
end;
← →
umbra © (2006-01-10 12:59) [1]может, на случай нескольких клиентов, приславших сообщения одновременно?
поэтому и сервер нужен.
← →
GuAV © (2006-01-10 13:25) [2]
> может, на случай нескольких клиентов, приславших
> сообщения одновременно?
Я вот тоже так подумал но... как при этом может помочь этот TClientDataThread ? Или TcpServer1Accept вызывается не в контексте основного потока ?
Кстати, код потока:procedure TClientDataThread.Execute;
begin
Synchronize(synchAddDataToControl);
end;
procedure TClientDataThread.synchAddDataToControl;
begin
TargetList.AddStrings(ListBuffer);
end;
← →
umbra © (2006-01-10 13:42) [3]как я понимаю, TcpServer1Accept вызывается, когда коннектится новый клиент. А в это время может идти обмен данными с другим клиентом. Кроме того, в этом примере свойство
BlockMode
сервера установлено вbmThreadBlocking
, чтобы обеспечить возможность подключения многих клиентов, и сохранить целостность их данных (т.е чтобы строки разных сообщений не перепутались)
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.012 c