A method of optimizing data streaming in a peer-to-peer architecture that
comprises a plurality of clients in a chain, a peer-to-peer data
streaming system having such architecture, and a client terminal for use
in that system. Each client monitors its own bandwidth, informs a
succeeding client in the chain of that bandwidth, compares its own
bandwidth with the bandwidth of a preceding client in the chain and, in
response to a difference between the compared bandwidths, reorders its
position among the clients in the chain. The chain thus dynamically
self-organizes itself to stream data more efficiently and with higher,
more reliable throughput, reducing the processing power necessary to
stream the data and enabling higher quality to be achieved within the
existing internet infrastructure. This also solves the `bottle-neck`
problem within the cascaded streaming path by continuously organizing the
participating terminals into the most efficient configuration, without
interrupting the streamed data.