The terms "client," "server," and "peer-to-peer" are all a bit ambiguous and borders between them are blurred.
A given entity X that is a server generally does not initiate connections, but waits for clients to talk to it. Conversely, clients do not listen for connections, but initiate connections toward a specified or discovered server.
Peer to peer would be where X can either initiate or receive connections.
Now X here can be a process, or part of a process, or a thread of a process, etc. but it should all be the same service. Sometimes a process or program is a client of one type of service and then a server of another. So this would not really be "peer-to-peer" but just a program that is both a client (of one type) and a server (of another type).
In the example you provide, there are two things going on, a discovery process, and then a data transfer process. So you have two different protocols, or parts of protocols, going on. Most everything that is "peer-to-peer" is sort of hybrid like this, and even though the peers can trade data without the assistance of a server, they still need something like a server for discovery.