When transmitting to localhost, you aren't actually transmitting - you are just copying memory, which is fast.
When you switch to a lan you are moving the data across a 33mhz bus, into a buffer on your network card which is then transmitted using a serial protocol onto your lan, and then the reverse happens on the receiver. Each of these steps take time.
Also, if you are transmitting lots of data from different machines, you'll get network collisions (two or more NICs transmitting at the same time on the same piece of wire), causing delayed retransmissions. For UDP, sometimes the packet can be dropped altogether, causing the data to never be received.
If you are transmitting your data every frame (which I assume that you are doing), even though there isn't a lot of data in the packet, and if all machines are receiving this and responding, you'll soon cause your connections to grind to a halt, resulting in ... choppy movement!
Try to reduce the number of transmissions you do (eg, once every 10 frames or so) and see if that helps - of course, you'd need to add code to keep objects moving between transmissions to keep things looking reasonable.
Here are a few sites that contain examples/explanations of networking code in actual games and the system used to support multiplayer (dead-reckoning, delta, prioritising etc):
http://unreal.epicgames.com/Network.htmhttp://web.archive.org/web/20060322211154/http://www.bookofhook.com/Article/GameDevelopment/TheQuake3NetworkingModel.htmlhttp://www.gamasutra.com/features/20010322/terrano_01.htm