我还有一个很重要的问题就是在调用Send之后是不是底层只是把要发送的字节压入TCP缓冲后就直接返回了? 因为有时候客户端会收不到来自服务端的有效消息,就是在服务端确认客户端之后。连续发送的2次数据包,在客户端有时候会没办法收到有效的确认登录的包 private void SendIdentifyInformationAndBeginHandle(playerInformation player) { MakeMsgPacket(player, BitConverter.GetBytes(player.ID), 1, 99); player.SOCKET.Send(player.BUFF, player.AvailableDataInBuff, SocketFlags.None);//envoyer les donnees importants aux nouveaux joueur, et a partir de now, is me handle you MakeMsgPacket(player, Encoding.ASCII.GetBytes("Good work, you are now identified in server, and your id is "+player.ID), 1, 1001); player.SOCKET.Send(player.BUFF, player.AvailableDataInBuff, SocketFlags.None); Console.WriteLine("Identifie send, player " + player.Name + " is identified"); player.Etat = playerInformation.ETAT.FREE; player.SOCKET.BeginReceive(player.BUFF, 0, MessageHead.SIZE, SocketFlags.None, AsynReceiveHead, player);//on commence a recevoir des requetes de client }
因为有时候客户端会收不到来自服务端的有效消息,就是在服务端确认客户端之后。连续发送的2次数据包,在客户端有时候会没办法收到有效的确认登录的包 private void SendIdentifyInformationAndBeginHandle(playerInformation player)
{
MakeMsgPacket(player, BitConverter.GetBytes(player.ID), 1, 99); player.SOCKET.Send(player.BUFF, player.AvailableDataInBuff, SocketFlags.None);//envoyer les donnees importants aux nouveaux joueur, et a partir de now, is me handle you
MakeMsgPacket(player, Encoding.ASCII.GetBytes("Good work, you are now identified in server, and your id is "+player.ID), 1, 1001);
player.SOCKET.Send(player.BUFF, player.AvailableDataInBuff, SocketFlags.None);
Console.WriteLine("Identifie send, player " + player.Name + " is identified");
player.Etat = playerInformation.ETAT.FREE;
player.SOCKET.BeginReceive(player.BUFF, 0, MessageHead.SIZE, SocketFlags.None, AsynReceiveHead, player);//on commence a recevoir des requetes de client
}