Java only supports network connections via two protocols: TCP/IP and UDP. HTTP is a transfer protocol used to send and recieve data once a connection has been established (FTP is another common transfer protocol). When creating sockets in Java, if you are using datagram sockets, your protocol is UDP. Otherwise, your protocol is TCP/IP. I don't know much about RMI, but it is my understanding that RMI manages the network layer for you. You have to create the client and server, but once you do that and register the applications, you just make method calls like the methods were local, and RMI deals with the sending and recieving of serialized objects via your network connection.