private void Socket_Client_Training_Session_Management(object arg) { //short client_id = (short)arg; Int64 client_id = (Int64)arg; try { using (Socket Socket_Client_Training = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)){ IPEndPoint Socket_Server_Training = new IPEndPoint(IPAddress.Parse("10.100.82.52"), Port_Socket_Server_Training); Socket_Client_Training.Connect(Socket_Server_Training); //while (true) //{ Session_Packet_Client_Training Session_Packet = new Session_Packet_Client_Training(); Session_Packet.Packet_Encode(client_id); Socket_Client_Training.Send(Session_Packet.packet); int resend_times = 0; bool IsFinishSending = false; while (!IsFinishSending) { int size_packet_status = Socket_Client_Training.Receive(Session_Packet.packet_status, Session_Packet.packet_status.Length, SocketFlags.None); bool IsDecodeWell = Session_Packet.packet_status.SequenceEqual(new byte[] { 0x00, 0x08, 0x08, 0x06 }); if (IsDecodeWell) { IsFinishSending = true; } else { Socket_Client_Training.Send(Session_Packet.packet); resend_times++; } if (resend_times == 3) { Write_Exception_Log_Client(" Packet Lost | " + "client_id " + client_id.ToString() + " | " + " LocalEndPoint " + Socket_Client_Training.LocalEndPoint + " | " + " md5 wrong and resend over 3 times | Packet Lost"); //Write_Session_Log_Client(Session_Packet, Socket_Client_Training); //Write_Session_Binary_Client(Session_Packet, Socket_Client_Training); IsFinishSending = true; } } //Thread.Sleep(30 * 60 * 1000); //} Socket_Client_Training.Close(); } } catch (Exception ex) { Write_Exception_Log_Client("Socket_Client_Training_Session_Management " + "client_id " + client_id.ToString() + " | " + ex.ToString()); //Socket_Client_Training.Close(); Thread.Sleep(30 * 1000); Socket_Client_Training_Session_Management(arg); } finally { } }
private void Write_Session_Log_Client(Session_Packet_Client_Training Session_Packet, Socket Socket_Client_Training)//Sever沒收到正確回報Client,於Client端寫Session Info檔案 { try { lock (_sesion_log_client_Lock) { if (!Directory.Exists(GetCurrentFilePath(@"Client\Session Log"))) { DirectoryInfo di = Directory.CreateDirectory(GetCurrentFilePath(@"Client\Session Log")); } string file = GetCurrentFilePath(@"Client\Session Log\Packet_Lost_Session_Log_" + DateTime.Now.ToString("yyyyMM") + ".csv"); string first_line_in_file = "Record Time, Transmit Time, Client_id, RemoteEndPoint, Info, "; if (!File.Exists(file)) { using (StreamWriter sw = File.CreateText(file)) { sw.WriteLine(first_line_in_file); sw.WriteLine("@" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ", " + "@" + Session_Packet.datetime_transmit.ToString("yyyy-MM-dd HH:mm:ss") + ", " + Session_Packet.client_id2.ToString() + ", " + Socket_Client_Training.RemoteEndPoint + ", " + Session_Packet.str_2send ); } } else if (File.Exists(file)) { using (StreamWriter sw = File.AppendText(file)) { sw.WriteLine("@" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + ", " + "@" + Session_Packet.datetime_transmit.ToString("yyyy-MM-dd HH:mm:ss") + ", " + Session_Packet.client_id2.ToString() + ", " + Socket_Client_Training.RemoteEndPoint + ", " + Session_Packet.str_2send ); } } } } catch (Exception ex) { Write_Exception_Log_Client("Write_Session_Log_Client " + ex.ToString()); } finally { } }
private void Write_Session_Binary_Client(Session_Packet_Client_Training Session_Packet, Socket Socket_Client_Training)//Sever沒收到正確回報Client,於Client端寫Session Binary檔案 { try { lock (_sesion_binary_client_Lock) { if (!Directory.Exists(GetCurrentFilePath(@"Client\Session Binary"))) { DirectoryInfo di = Directory.CreateDirectory(GetCurrentFilePath(@"Client\Session Binary")); } string file = GetCurrentFilePath(@"Client\Session Binary\Packet_Lost_Client" + Session_Packet.client_id2 + @"_Binary_" + Session_Packet.datetime_transmit.ToString("yyyyMMddhhmmss") + ".bin"); File.WriteAllBytes(file, Session_Packet.body_binary); } } catch (Exception ex) { Write_Exception_Log_Client("Write_Session_Binary_Client " + ex.ToString()); } finally { } }