private void StartReceive() { new Thread(delegate() { byte[] buffer = new byte[DATA_LENGTH]; while (true) { try { if (isClosed || !socket.Connected) { //Close(); return; } buffer = new byte[socket.Available]; int length = socket.Receive(buffer, buffer.Length, SocketFlags.None); if (length <= 0) { continue; } string packetString = Encoding.Default.GetString(buffer); OnReceive(packetString); //Thread.Sleep(1); } catch (Exception e) { Eutils.FileError(String.Format("{0} {1} \n", e.Message, e.StackTrace), "client_error.txt"); Eutils.WriteLine("Error Receiving! Message:{0} Stacktrace: {1}", Eutils.MESSSAGE_TYPE.ERROR, e.Message, e.StackTrace); Close(); break; } } }).Start(); }
public void Send(string dataToSend) { if (isClosed) { return; } if (socket == null || !socket.Connected) { Close(); return; } dataToSend = QEncryption.Encrypt(dataToSend); dataToSend = PacketDatas.PACKET_HEADER + dataToSend; //We us UTF8 characterss so lets convert the bytes into utf8 string! byte[] dataBytes = Encoding.UTF8.GetBytes(dataToSend); //And then send it to our client. try { socket.Send(dataBytes, SocketFlags.None); } catch (Exception e) { Eutils.FileError(String.Format("{0} {1} \n", e.Message, e.StackTrace), "client_error.txt"); Eutils.WriteLine("Error Sending! Message:{0}", Eutils.MESSSAGE_TYPE.ERROR, e.Message, e.StackTrace); Close(); } }
private void ReceiveCallback(IAsyncResult ar) { try { StateObject state = (StateObject)ar.AsyncState; if (isClosed || socket == null || !socket.Connected || socket.Available != 0 || socket.Poll(0, SelectMode.SelectRead)) { Close(); return; } // Read data from the client socket. int bytesRead = socket.EndReceive(ar); //More data if (bytesRead > 0) { state.stringBuilder.Append(Encoding.ASCII.GetString(state.buffer, 0, bytesRead)); string packetData = state.stringBuilder.ToString(); state = new StateObject();//reset socket.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, new AsyncCallback(ReceiveCallback), state); OnReceive(packetData); } } catch (Exception e) { Eutils.FileError(String.Format("{0} {1} \n", e.Message, e.StackTrace), "client_error.txt"); Eutils.WriteLine("Error receiving:{0} {1}", Eutils.MESSSAGE_TYPE.ERROR, e.Message, e.StackTrace); Close(); } }
private void OnReceive(string packetString) { //Then we send this. if (packetString[0].ToString() != PacketDatas.PACKET_HEADER) { Close(); return; } string[] packets = packetString.Split(new string[] { PacketDatas.PACKET_HEADER }, StringSplitOptions.None); for (int i = 1; i < packets.Length; i++) { //Eutils.WriteLine("received data:{0} at Time:{1} Length:{2}", Eutils.MESSSAGE_TYPE.NORMAL, packets[i], DateTime.Now, packets[i].Length); packets[i] = QEncryption.Decrypt(packets[i]); Eutils.WriteLine("decrypted data:{0} at Time:{1} Length:{2}", Eutils.MESSSAGE_TYPE.NORMAL, packets[i], DateTime.Now, packets[i].Length); if (packets[i] == "NULL") { Eutils.FileError(String.Format("{0} \n", "Error decrypting: packets[i] == NULL"), "client_error.txt"); Eutils.WriteLine("Error decrypting", Eutils.MESSSAGE_TYPE.ERROR); //Close(); break; } //Split the packet by our split character. string[] packetStrings = packets[i].Split(new string[] { PacketDatas.PACKET_SPLIT }, StringSplitOptions.None); received(this, packetStrings); } }