When using the SocketAsyncEventArgs and ReadAsync classes, where do I put the read buffer and where do I put the send buffer? or can I only read or send at the same time not both? I am a bit confused.
I think you are looking for the Buffer SocketAsyncEventArgs . This tutorial explains how to use the SocketAsyncEventArgs class correctly.
Buffer
SocketAsyncEventArgs
The MSDN article for the class contains some useful notes and also provides sample code (they are almost always a good start).
You can use SocketAsyncEventArgs for only one operation at a time.
To read and write async at the same time, you will need two SocketAsyncEventArgs objects.
See http://www.codeproject.com/KB/cs/socketasynceventargs.aspx