If this is just two player, sending either delta changes or absolute values on moving shouldn't be too much for your code to handle.
With networking, you always want to try and figure out how you can cut down the amount of data being sent out and also limit the amount of times data is being sent out as well.
For example, that's why on a chatting site for example, webcam data might try to resample data in order to cut down the amount of data being sent through. This will allow to only send major changes to cut down on the amount of data coming through for each packet, and total packets in general.
First thing you can do with player movements and other things in games when sending any type of data would obviously be to serialize it. You can create one main Packet class that will serialize your data in and out and then parse it for whoever needs to receive it. When the packet comes in you can easily parse out the data and say, okay this packet ID is 3 so that means it was a player move packet and send it off to be processed by the client.
Another thing is obviously the server knows where the player is, so if anything is off screen you can easily just ignore it. In a 2D game this is easy enough depending on how much control over the screen you give the client. In a 3D game, you can either process packets from things withen a certain radius from your player, or perhaps certain sectors/zones/chunks surrounding you.
If you feel that you're sending too much through, and the server is being bogged down, you might want to try to do a form of "resample" for most packets while trying to cut down on jitter. By that, I mean, you can just send a packet that the player has started moving in a direction and ignore all changes that are only slight movements of X units.
In a senario where player A moves left on screen, you might be thinking oh great every game frame I'm going to update that and that's X packets over X time. But, instead if you only send out that they've moved in this direction you can send one packet when they start moving and another when they've stopped.
One problem with this is if you miss a packet for stopping then they'll be flying away across the world and maybe jump back later on when they update again, it's all a big pain. Instead, if you're okay with sending data in intervals, you can try to update every few seconds or every few whatever units to try and cut down on packets and not worrying about missing an important packet like stopping.
Just jumping back to the packet structure for a moment to explain this next part, let's say your packet structure looks like this:
And let's say that movement might look like this:
So for this example, let's say that packet ID for movement is 3 and our entity ID is 2, alright? So, right now we can guess how many bytes this might be. You might say four bytes, that's possible, but you have to think about your min and max values. If you're okay with only having 256 possible entities, then one byte for entity_id is fine, but if you want to exceed that, you're going to have to increase the size. Two bytes will give you 65,535 possible entities, that might be too much or enough or whatever. You could borrow bits from the packet_id if you feel that you wont be needing 256 different IDs. If you're only going to use 16 then you can use 4 bits from the first byte for the ID from 0000 to 1111 (0 - 15) and then the other 4 bits can be part of the next argument.
In the case of entity IDs, you have 16 sets of 256 by using the 4 bits as a set index. This will result in giving you 4,096 possible entities instead of 256, but remember you sacrifice the amount of packet IDs you can have. Of course, you don't HAVE to just take half of the first byte, you can use maybe 5 or 6 bits for the ID and then leave yourself with 2 or 3 bits for the second half. Maybe you only want to sacrifice 2 bits from the packet ID to give you a total of 63 packets and then give you 4 sets of the next byte which means 1,024 possible entities. Or, maybe you don't care about that too much, and you're okay with using two bytes for entities, whatever works best for you.
Now, let's say though that you do want to keep your X and Y down. If you have a huge coordinate system, you're going to be screwed. You could use two bytes if you have only 65,535 units to move in on the screen in your map or level or whatever you're on.
You could either use a chunk system where you can limit yourself to 256 units per chunk then add a byte before X and Y for what chunk your in, but then you again limit yourself to 256 chunks which might be good enough for you, but maybe you dont want to worry about how many chunks you can have, or maybe you're going to have two bytes for chunks and that's two bytes too many!
The fix for that would be to do something like have a delta move packet and an absolute move packet. The delta move packet can just update the relative movement X and Y based on the current position you're in. This saves you from adding the chunk byte in, keeping your packet down to only 4 bytes for movement instead of 5 or more. If your player has moved more than 256 units in X and or Y, then you can do an absolute position which can take the chunk and the X and Y. What you would be aiming for with this is assuming that if your player teleported or something then you could use the absolute chunk move, but if you're just walking along side them, you can use delta/relative move packets because they're only going to be moving so much per update anyways.
Anyways, I think you get the idea of what I'm saying here. Hopefully this helps, I know some of these concepts were explained already by other people in here, but I figured I would go over them again and explain a few other things as well.
I hope this helps.