void RecMsg() { while (isRec) { try { arrMsg = new byte[1024 * 1024 * 2]; //接收 对应 客户端发来的消息 int length = sokMsg.Receive(arrMsg); Package pk = new Package(); pk.UnPack(arrMsg); if (pk.ArrFlag == 0) { //将接收到的消息数组里真实消息转成字符串 string strMsg = System.Text.Encoding.UTF8.GetString(pk.ArryPackage, 0, length - 1); //发送到在同一房间的socket; Transpond(strMsg); //通过委托 显示消息到 窗体的文本框 dgShowMsg(strMsg); } if (pk.ArrFlag == 2) { //将接收到的消息数组里真实消息转成字符串 string strMsg = System.Text.Encoding.UTF8.GetString(pk.ArryPackage, 0, length - 1); //通过委托 显示消息到 窗体的文本框 string[] str = strMsg.Split('|'); MethodInfo mi = this.GetType().GetMethod(str[0]); object[] ss = new object[] { strMsg }; mi.Invoke(this, ss); dgShowMsg(str[0]); this.sokMsg.Send(arrMsg); } if (pk.ArrFlag == 4) { List <byte> lb = new List <byte>(arrMsg); byte [] newBuff = lb.GetRange(0, length).ToArray(); int id = pk.ArryPackage[0]; Room room = funcGetRoomByRoomId(Convert.ToInt32(id)); if (room.hostSock == this.sokMsg) { room.payerSock.Send(newBuff); } else { room.hostSock.Send(newBuff); } } } catch (Exception) { isRec = false; //从主窗体中 移除 下拉框中对应的客户端选择项,同时 移除 集合中对应的 ConnectionClient对象 dgRemoveConnection(sokMsg.RemoteEndPoint.ToString()); } } }