You are wellcome!

Each TCP connection is identified by the server IP and Port and client IP and Port (you have this information available at the servers and client side). But I do not think that this information has any purpose for you. Do you need to differentiate between the clients (from the server's view) or are all clients identical?

Do the server need to send information to some clients without a request form the client? If that is true, you should use threaded TCP connections (which can be an advanced topic).

Give me a list of features you server has to serve, and I can give you some advice how to implement it.

Do you mean the Indy components (starts with Tid*)?

UDP is packet oriented (TCP is connection oriented) but a successful data transfer is not guaranteed by the protocol. You won't get any error message if a UDP package is lost or can not be transmitted. With an TCP connection the transfer is guaranteed by the protocol layer and TCP have built in retransmit. There it has a lot more overhead than UDP.

UDP is usefull for short messages, for request/response communications between server and client or for regular status updates from an machine. But UDP can not handle multiple connections (because there is no connection).

It is difficult to explain for me because english is not my mother tongue.