//发送 public static void Send(ClientState cs, MsgBase msg) { //状态判断 if (cs == null) { return; } if (!cs.socket.Connected) { return; } //数据编码 byte[] nameBytes = MsgBase.EncodeName(msg); byte[] bodyBytes = MsgBase.Encode(msg); int len = nameBytes.Length + bodyBytes.Length; byte[] sendBytes = new byte[2 + len]; //组装长度 sendBytes[0] = (byte)(len % 256); sendBytes[1] = (byte)(len / 256); //组装名字 Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length); //组装消息体 Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length); //为简化代码,调用同步方法 cs.socket.Send(sendBytes); }
//发送 public static void Send(ClientState cs, MsgBase msg) { //状态判断 if (cs == null) { return; } if (!cs.socket.Connected) { return; } //数据编码 byte[] nameBytes = MsgBase.EncodeName(msg); byte[] bodyBytes = MsgBase.Encode(msg); int len = nameBytes.Length + bodyBytes.Length; byte[] sendBytes = new byte[2 + len]; //组装长度 sendBytes[0] = (byte)(len % 256); sendBytes[1] = (byte)(len / 256); //组装名字 Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length); //组装消息体 Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length); //为简化代码,不设置回调 try{ cs.socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, null, null); }catch (SocketException ex) { Console.WriteLine("Socket Close on BeginSend" + ex.ToString()); } }
public static void Send(ClientState cs, string msg) { if (cs == null) { return; } if (!cs.socket.Connected) { return; } MsgBase msgBase = JsonConvert.DeserializeObject <MsgBase>(msg); byte[] nameBytes = MsgBase.EncodeName(msgBase); byte[] bodyBytes = System.Text.Encoding.UTF8.GetBytes(msg); int len = nameBytes.Length + bodyBytes.Length; byte[] sendBytes = new Byte[2 + len]; sendBytes[0] = (byte)(len % 256); sendBytes[1] = (byte)(len / 256); Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length); Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length); try { cs.socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, null, null); } catch (SocketException ex) { Debug.WriteLine("Socket Close on BeginSend {0}", ex.ToString()); throw; } }
public static void Send(ClientState state, MsgBase msgBase) { if (!state.socket.Connected || state == null) { return; } byte[] nameBytes = MsgBase.EncodeName(msgBase); byte[] bodyBytes = MsgBase.Encode(msgBase); Int16 len = (Int16)(nameBytes.Length + bodyBytes.Length); byte[] readBuff = new byte[len + 2]; readBuff[0] = (byte)(len % 256); readBuff[1] = (byte)(len / 256); Array.Copy(nameBytes, 0, readBuff, 2, nameBytes.Length); Array.Copy(bodyBytes, 0, readBuff, 2 + nameBytes.Length, bodyBytes.Length); ByteArray array = new ByteArray(readBuff); try { state.socket.BeginSend(array.bytes, array.readIndex, array.length, 0, SendCallBack, state); } catch (Exception ex) { Console.WriteLine("Socket Close On BeginSend " + ex.ToString()); } }
public static void Send(ClientState state, MsgBase msg) { if (state == null || !state.socket.Connected) { return; } byte[] nameBytes = MsgBase.EncodeName(msg); byte[] bodyBytes = MsgBase.Encode(msg); int length = nameBytes.Length + bodyBytes.Length; byte[] sendBytes = new byte[length + 2]; sendBytes[0] = (byte)(length % 256); sendBytes[1] = (byte)(length / 256); Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length); Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length); try { Console.WriteLine("Send { " + msg.msgName + " } to " + state.socket.RemoteEndPoint); state.socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, null, null); } catch (SocketException ex) { Console.WriteLine("Socket send message error " + ex.ToString()); } }
/// <summary> /// 发送数据 /// </summary> /// <param name="clientSocket"></param> /// <param name="msgBase"></param> public static void SendMessage(ClientSocket clientSocket, MsgBase msgBase) { if (clientSocket == null || !clientSocket.Socket.Connected) { return; } try { //分为三部分,头:总协议长度;名字;协议内容。 byte[] nameBytes = MsgBase.EncodeName(msgBase); byte[] bodyBytes = MsgBase.Encond(msgBase); int len = nameBytes.Length + bodyBytes.Length; byte[] byteHead = BitConverter.GetBytes(len); byte[] sendBytes = new byte[byteHead.Length + len]; Array.Copy(byteHead, 0, sendBytes, 0, byteHead.Length); Array.Copy(nameBytes, 0, sendBytes, byteHead.Length, nameBytes.Length); Array.Copy(bodyBytes, 0, sendBytes, byteHead.Length + nameBytes.Length, bodyBytes.Length); clientSocket.Socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, null, null); } catch (SocketException ex) { Debug.LogError("Socket发送数据失败:" + ex); } }
//发送数据 public static void Send(MsgBase msg) { //状态判断 if (socket == null || !socket.Connected) { return; } if (isConnecting) { return; } if (isClosing) { return; } //数据编码 byte[] nameBytes = MsgBase.EncodeName(msg); byte[] bodyBytes = MsgBase.Encode(msg); int len = nameBytes.Length + bodyBytes.Length; // byte[] sendBytes = new byte[INT32+len+1]; // sendBytes[INT32+len] = System.Text.Encoding.UTF8.GetBytes("\n")[0]; byte[] sendBytes = new byte[INT32 + len]; byte[] lenBytes = ArrayUtils.intToByteArray(len); for (int i = 0; i < INT32; i++) { sendBytes[i] = lenBytes[i]; } //组装长度 // sendBytes[0] = (byte)(len%256); // sendBytes[1] = (byte)(len/256); //组装名字 Array.Copy(nameBytes, 0, sendBytes, INT32, nameBytes.Length); //组装消息体 Array.Copy(bodyBytes, 0, sendBytes, INT32 + nameBytes.Length, bodyBytes.Length); // for(int i=0;i<sendBytes.Length;i++){ // Debug.Log(sendBytes[i]); // } //写入队列 ByteArray ba = new ByteArray(sendBytes); int count = 0; //writeQueue的长度 lock (writeQueue){ writeQueue.Enqueue(ba); count = writeQueue.Count; } //send if (count == 1) { socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket); } }
// Use this for initialization void Start() { //Json测试 MsgMove msgMove = new MsgMove(); byte[] bs = MsgBase.EncodeName(msgMove); int count; string name = MsgBase.DecodeName(bs, 0, out count); Debug.Log(name); Debug.Log(count); }
// 发送数据 public static void Send(MsgBase msg) { // 状态判断 if (socket == null || !socket.Connected) { return; } if (isConnecting) { return; } if (isClosing) { return; } // 数据编码 byte[] nameBytes = MsgBase.EncodeName(msg); // 协议名长度+协议名 byte[] bodyBytes = MsgBase.Encode(msg); // 协议体 int len = nameBytes.Length + bodyBytes.Length; // 总长度 byte[] sendBytes = new byte[2 + len]; // 组装总长度 sendBytes[0] = (byte)(len % 256); sendBytes[1] = (byte)(len / 256); // 组装协议名 Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length); // 组装协议体 Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length); // 写入队列 ByteArray ba = new ByteArray(sendBytes); int count = 0; // writeQueue的长度 lock (writeQueue) { writeQueue.Enqueue(ba); count = writeQueue.Count; } // Send if (count == 1) { socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket); } }
//发送数据 public static void Send(MsgBase msg) { if (socket == null || !socket.Connected) { return; } if (isConnecting) { return; } if (isClosing) { return; } //数据编码 byte[] nameBytes = MsgBase.EncodeName(msg); //名字 byte[] bodyBytes = MsgBase.Encode(msg); //消息体 int len = nameBytes.Length + bodyBytes.Length; byte[] sendBytes = new byte[2 + len]; //组装长度 sendBytes[0] = (byte)(len % 256); sendBytes[1] = (byte)(len / 256); //组装名字 Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length); //组装消息体 Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length); //写入队列 ByteArray ba = new ByteArray(sendBytes); int count = 0; lock (writeQueue) //lock 避免线程冲突 { writeQueue.Enqueue(ba); count = writeQueue.Count; } //send if (count == 1) { socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket); } }
public static void Send(MsgBase msg) { if (socket == null || !socket.Connected) { return; } if (isConnecting) { return; } if (isClosing) { return; } byte[] nameBytes = MsgBase.EncodeName(msg); byte[] bodyBytes = MsgBase.Encode(msg); int len = nameBytes.Length + bodyBytes.Length; byte[] sendBytes = new byte[2 + len]; sendBytes[0] = (byte)(len % 256); sendBytes[1] = (byte)(len / 256); Array.Copy(nameBytes, 0, sendBytes, 2, nameBytes.Length); Array.Copy(bodyBytes, 0, sendBytes, 2 + nameBytes.Length, bodyBytes.Length); ByteArray byteArray = new ByteArray(sendBytes); int count = 0; lock (writeQueue) { writeQueue.Enqueue(byteArray); count = writeQueue.Count; } if (count == 1) { socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallback, socket); } socket.Send(sendBytes); }
/// <summary> /// 发送数据到服务器 /// </summary> /// <param name="msgBase"></param> public void SendMessage(MsgBase msgBase) { if (m_Socket == null || !m_Socket.Connected) { return; } try { byte[] nameBytes = MsgBase.EncodeName(msgBase); byte[] bodyBytes = MsgBase.Encond(msgBase); int len = nameBytes.Length + bodyBytes.Length; byte[] byteHead = BitConverter.GetBytes(len); byte[] sendBytes = new byte[byteHead.Length + len]; Array.Copy(byteHead, 0, sendBytes, 0, byteHead.Length); Array.Copy(nameBytes, 0, sendBytes, byteHead.Length, nameBytes.Length); Array.Copy(bodyBytes, 0, sendBytes, byteHead.Length + nameBytes.Length, bodyBytes.Length); ByteArray ba = new ByteArray(sendBytes); lock (m_WriteQueue) { m_WriteQueue.Enqueue(ba); if (m_WriteQueue.Count == 1) { m_Socket.BeginSend(sendBytes, 0, sendBytes.Length, 0, SendCallBack, m_Socket); } else { Debug.LogError("消息队列数量不止一个"); } } } catch (Exception ex) { Debug.LogError("SendMessage error:" + ex.ToString()); ClientClose(); } }