@Phoenix
Ideas are always welcome, then for the implementation one always hopes not to be alone. I think that those who benefit from your demo can contribute in turn accordingto their possibilities.
Ideas:
1. When accessing FThreadList(TThreadList) in TTCPBase class, the following mechanism is used:
List := FThreadList.LockList;
try
//..
finally
FThreadList.UnlockList;
end;
Which is fine, but not enough. With the current method, if more then one client is connecting at the same time, the server might miss a few clients. Another Lock/Unlock mechanism should be implemented, similar to the one in TTaskList, using CriticalSections and the FBlocked boolean. TThreadList can be replaced with a simple TList because it will be protected with CS.
This is a bug and should be fixed.
2. Create working threads for filetransfer, to make both client/server faster and more responsive. @piola already implemented something similar in reply #35
3. Fixing the daemon/service issue, @datilas post in reply #52
4. Switching from TCP to UDP when broadcasting
5. Implement UDP hole punching
6. Create a github/gitlab/bitbucket/sourforge(/ = or) repository. Currently we are ping-ponging with the source files, like we did in the '90. It' s so unprofessional and dirty, I almost enjoying it.

Seriously though we need a repository. I have enough on my plate with OPM, it would be really nice if somebody could take care of the repository.
I attach the whole project again, with the same uTCPServer unit from your last post, minus a few comments("//#") , those are not needed anymore.