You better send serialized objects than plain text with separators. E.g., create:
enum PacketType
{
LoginData,
OtherData
}
public interface IPacket
{
PacketType PacketType { get; }
}
On your client side create and send:
[Serializable]
public class LoginPacket : IPacket
{
public PacketType PacketType { get { return PacketType.LoginData; } }
public string Login { get; private set; }
public string Password { get; private set; }
public LoginPacket(string login, string password)
{
Login = login;
Password = password;
}
}
Send to server
new LoginPacket("username", "password")
And on the server side test the received data object for type and get its content, e.g.:
var receivedPacket = data as IPacket;
switch (receivedPacket.PacketType)
{
case PacketType.LoginData:
var loginPacket = data as LoginPacket;
break;
default:
break;
}
PS1. It is better to send password hash instead of plain password.
PS2. Check out this article by Roy Triesscheijn:
http://royalexander.wordpress.com/2009/05/31/sending-objects-via-high-speed-asynchronous-sockets-in-c-serialization-socket-programming/[
^].