public override bool DoSendResultSmell() { string commandText = m_outgoingDataAssembler.GetProtocolText(); byte[] bufferUTF8 = str2HexByte(commandText); int totalLength = bufferUTF8.Length; //获取总大小 AsyncSendBufferManager asyncSendBufferManager = m_asyncSocketUserToken.SendBuffer; asyncSendBufferManager.StartPacket(); // asyncSendBufferManager.DynamicBufferManager.WriteInt(totalLength, false); //写入总大小 asyncSendBufferManager.DynamicBufferManager.WriteBuffer(bufferUTF8, 0, totalLength); asyncSendBufferManager.EndPacket(); bool result = true; if (!m_asyncSocketUserToken.SendAsyncState) { int packetOffset = 0; int packetCount = 0; if (asyncSendBufferManager.GetFirstPacket(ref packetOffset, ref packetCount)) { m_asyncSocketUserToken.SendAsyncState = true; m_asyncSocketUserToken.SendAsyncState = true; result = m_asyncSocketServer.SendAsyncEvent(m_asyncSocketUserToken.ConnectSocket, m_asyncSocketUserToken.SendEventArgs, asyncSendBufferManager.DynamicBufferManager.Buffer, packetOffset, packetCount); } } return(result); }
public void MonitorSocketStart(object source, System.Timers.ElapsedEventArgs e) { //轮巡SOCKET管理类,查数据接收超时 AsyncSocketUserToken[] ListSoc = null; m_asyncSocketServer.AsyncSocketUserTokenList.CopyList(ref ListSoc); for (int i = 0; i < ListSoc.Length; i++) { try { //SOCKET不为空,则可以发送消息 if (ListSoc[i].ConnectSocket != null) { // Console.WriteLine("{0} is time out!!!", ListSoc[i].ConnectSocket.ToString()); // //todo 服务器主动断掉这个链接,其他操作待添加 if (ListSoc[i].AsyncSocketInvokeElement != null) { ///当前端口发送不冲突 //byte[] bufferUTF8 = str2HexByte(ListSoc[i].StrQueryCommand); byte[] bufferUTF8 = str2HexByte("01030000F1D8"); AsyncSendBufferManager asyncSendBufferManager = ListSoc[i].SendBuffer; asyncSendBufferManager.StartPacket(); // asyncSendBufferManager.DynamicBufferManager.WriteInt(totalLength, false); //写入总大小 asyncSendBufferManager.DynamicBufferManager.WriteBuffer(bufferUTF8, 0, bufferUTF8.Length); asyncSendBufferManager.EndPacket(); // bool result = true; // Console.WriteLine("ListSoc[i].SendAsyncState = ?" + ListSoc[i].SendAsyncState); //如果发送端口被占有 while (ListSoc[i].SendAsyncState) { Thread.Sleep(100); Console.WriteLine("sleep 100"); } int packetOffset = 0; int packetCount = 0; if (asyncSendBufferManager.GetFirstPacket(ref packetOffset, ref packetCount)) { ListSoc[i].SendAsyncState = true; // Console.WriteLine(System.DateTime.Now + "ListSoc[i].SendAsyncState = true;"); Program.Logger.Debug(System.DateTime.Now + "send:" + bufferUTF8); result = m_asyncSocketServer.SendAsyncEvent(ListSoc[i].ConnectSocket, ListSoc[i].SendEventArgs, asyncSendBufferManager.DynamicBufferManager.Buffer, packetOffset, packetCount); } } } Thread.Sleep(100); } catch (Exception ex) { Console.WriteLine("##############" + ex); } } }
public bool send() { AsyncSendBufferManager sendBufferManager = userToken.AsyncSendBufferManager; string data = sendData.getSendData(); byte[] sendByte = FormatHelper.GetBytesFromGBKString(data); sendBufferManager.startPacket(); sendBufferManager.DynamicBufferManager.writeBuffer(sendByte); sendBufferManager.endPacket(); bool result = true; if (!isSending) { int packetOffset = 0; int packetCount = 0; if (sendBufferManager.getFirstPacket(ref packetOffset, ref packetCount)) { isSending = true; //每一次发送时,更新时间 userToken.ActiveDateTime = DateTime.Now; result = server.sendAsyncEvent(userToken.ConnectedSocket, userToken.SendAysncEvetnArgs, sendBufferManager.DynamicBufferManager.Buffer, packetOffset, packetCount); } } return(result); }
public bool sendComplete() { AsyncSendBufferManager sendBufferManager = userToken.AsyncSendBufferManager; sendBufferManager.clearFirstPacket(); isSending = false; int packetOffset = 0; int packetCount = 0; if (sendBufferManager.getFirstPacket(ref packetOffset, ref packetCount)) { isSending = true; return(server.sendAsyncEvent(userToken.ConnectedSocket, userToken.SendAysncEvetnArgs, sendBufferManager.DynamicBufferManager.Buffer, packetOffset, packetCount)); } else { return(sendCallBack()); } }
public AsyncSocketUserToken(int receiveBufferSize) { this.connectedSocket = null; this.receiveAysncEventArgs = new SocketAsyncEventArgs(); //此处一定要为receiveAsyncEventArgs设置一个缓冲区,否则会一直出现System.NullReferenceException: 未将对象引用设置到对象的实例 //ps:解决此问题的网址为http://www.cnblogs.com/jzywh/archive/2011/12/28/SuperSocket1_4SP2.html#2693439 //byte[] buffer = new byte[1024]; asyncReceiveBuffer = new byte[receiveBufferSize]; this.receiveAysncEventArgs.SetBuffer(asyncReceiveBuffer, 0, asyncReceiveBuffer.Length); this.receiveAysncEventArgs.UserToken = this; this.sendAysncEventArgs = new SocketAsyncEventArgs(); this.sendAysncEventArgs.UserToken = this; dynamicBufferManager = new DynamicBufferManager(ProtocolConst.InitBufferSize); asyncSendBufferManager = new AsyncSendBufferManager(ProtocolConst.InitBufferSize); invokeElement = null; DeviceInfo = null; }
public bool send(byte[] buffer, int offset, int length) { string info = ""; if (userToken.DeviceInfo != null) { info = string.Format("向DTU客户端(序号为:{0})发送数据,十六进制表示为:{1}", userToken.DeviceInfo.SerialString, FormatHelper.ByteArrayToHexString(buffer, offset, length)); } else { info = string.Format("向DTU客户端发送数据,十六进制表示为:{0}", FormatHelper.ByteArrayToHexString(buffer, offset, length)); } ShowLogData.add(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + userToken.ConnectedSocket.RemoteEndPoint.ToString() + "]发送:" + info); LogHelper.Info(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ":[" + userToken.ConnectedSocket.RemoteEndPoint.ToString() + "]发送:" + info); AsyncSendBufferManager sendBufferManager = userToken.AsyncSendBufferManager; sendBufferManager.startPacket(); sendBufferManager.DynamicBufferManager.writeBuffer(buffer, offset, length); sendBufferManager.endPacket(); bool result = true; if (!isSending) { int packetOffset = 0; int packetCount = 0; if (sendBufferManager.getFirstPacket(ref packetOffset, ref packetCount)) { isSending = true; //每一次发送时,更新时间 userToken.ActiveDateTime = DateTime.Now; result = server.sendAsyncEvent(userToken.ConnectedSocket, userToken.SendAysncEvetnArgs, sendBufferManager.DynamicBufferManager.Buffer, packetOffset, packetCount); } } return(result); }