static void DataOn(byte[] data, UserInfo userinfo) { //建立一个读取数据包的类 参数是数据包 //这个类的功能很强大,可以读取数据包的数据,并可以把你发送过来的对象数据,转换对象引用 ReadBytes read = new ReadBytes(data); int lengt; //数据包长度,用于验证数据包的完整性 int cmd; //数据包命令类型 //注意这里一定要这样子写,这样子可以保证所有你要度的数据是完整的,如果读不出来 Raed方法会返回FALSE,从而避免了错误的数据导致崩溃 if (read.ReadInt32(out lengt) && read.Length == lengt && read.ReadInt32(out cmd)) { //read.Read系列函数是不会产生异常的 //根据命令读取数据包 switch (cmd) { case 1000: string msg = read.ReadString(); while (true) { BufferFormat buffer = new BufferFormat(1000); buffer.AddItem(msg.ToString()); buffer.AddItem(new byte[8096]); byte[] pdata = buffer.Finish(); server.Send(userinfo, pdata); } break; } } }
public static void LogOn(SocketAsyncEventArgs e, string username, string password) { Console.WriteLine("UserName:{0} LogIn", username); //CHECK USER AND PASSWORD UserInfo user = new UserInfo() { UserName = username, PassWord = password, Asyn = e, BuffPool = e.UserToken as ZYNetRingBufferPool }; e.UserToken = user; UserList.Add(user); server.Send(e.AcceptSocket, ZYAutoBuffer.Call(1000, true)); //TRUE =LOGON OK ;FALSE=LOGON Fail }
/// <summary> /// 数据包输入 /// </summary> /// <param name="data">输入数据</param> /// <param name="socketAsync">该数据包的通讯SOCKET</param> static void BinaryInputHandler(byte[] data, SocketAsyncEventArgs socketAsync) { try { // server.SendData(socketAsync.AcceptSocket, data); server.Send(socketAsync.AcceptSocket, data); // socketAsync.AcceptSocket.Send(data); //AsyncSend tmp = socketAsync.UserToken as AsyncSend; //if (tmp != null) //{ // tmp.Send(data); //} } catch { } }