C# byte string tag'lar ile ve ekstra string bilgilerle gönderilmesi // Ar Ge internetten araştırmalarıma göre böyle bir şey herhangi bir yerde yazmıyor, örneğin ben soket üzerinden resim göndericem ama bunun istediğim resim olduğunu anlamam için bir kimlik veya ön ek lazım. Ben bu tag'ı bu resim byteları ile nasıl birleştirip daha sonra bunu unpack edip resme ulaşacağım? işte bana da bu lazımdı ve bu konu üzerinde birkaç gün ar ge çalışması yaptım ve çalışmalarım sonuç verdi. İstediğim veriyi istediğim ön ek ve ekstra bilgilerle bağlı soketime sorunsuzca iletebiliyorum. Başka yöntem mutlaka vardır ama ben bildiğim kadarıyla bu kadar yaptım. Kodlara geçelim, Şimdi bize ilk önce bir packer lazım, yani tag ve ekstra bilgileri ana veriyle birleştirmek için; Kod: /// /// Send any data to connected socket. /// /// The tag name of message, example: IP, MSGBOX, FILES etc. Then make switch case block for this tags /// on server or client. /// Data of your message; any byte array of your data; image, text, file etc. /// Extra Infos like: file name, max size, directory name etc. public static byte MyDataPacker { //This byte packer coded by qH0sT' 2021 AndroSpy. using (MemoryStream ms = new MemoryStream // packing için bir memeorystream açıyoruz. } Örnek olarak şunu gönderelim; Kod: byte resim = MyDataPakcer("RESIM", File. ReadAllBytes ; soket. Send(resim, 0, resim. Lenght, SocketFlag. None); gelelim okuma kısmına; Klasik Soket beginreceive endreceive kısmı. Kod: private MemoryStream memos = new MemoryStream ; // verileri yazıp sonra okuyacağımız bir hafıza akışı. private byte dataByte = new byte ; // tampon bölge private int blockSize = 1536000 // bu bölgenin uzunluğunu ben ayrı bir değişkende tanımladım. mySoket. BeginReceive(dataByte, 0, blockSize, SocketFlags. None, endRead, mySoket); // veri okumaya başla. public async v0id endRead // soketin endreceive callback'ini asenkron yaptım unpacker da asenkron Task ya o yüzden ama yapmayabilirsiniz de, normal metod olarak da yazabilirsiniz unpacker'ı da normal metod olarak yaparak. { try { Socket sckt = ar. AsyncState; int readed = sckt. EndReceive ; // klasik soket endreceive operasyonu. if (readed > 0) // eğer okunan bir veri varsa { if { memos. Write(dataByte, 0, readed); // soketten okunan veriyi olduğu gibi direkt hafıza akışına yazdırdık.try catch } } await Task. Delay(1); // sistemi biraz rahatlatmak için bu, çok da lazım değil. sckt. BeginReceive(dataByte, 0, blockSize, SocketFlags. None, endRead, sckt); // veri okuma işleminin devir daimi için. } catch } Unpacker kodlarım: Kod: public async Task UnPacker { //This unpacker coded by qH0sT' 2021 AndroSpy. //string letter = "qwertyuıopğüasdfghjklşizxcvbnmöç1234567890|"; Regex regex = new Regex(@"\| +\|. >"); // tag'ı ve ekstra bilgileri ayırt edeceğimiz regex. await Task. Run => { byte filebytes = Separate(ms. ToArray , Encoding. UTF8. GetBytes ; //byteları split ediyoruz. for (int k = 0; k < filebytes. Length 1; k++) { try { //oluşan verilerin hepsini almışmıyız diye kontrol ediyoruz. string ch = Encoding. UTF8. GetString(new byte );// > string f = Encoding. UTF8. GetString(new byte );// F> string o = Encoding. UTF8. GetString(new byte );// OF> string e = Encoding. UTF8. GetString(new byte );// EOF> string ch = Encoding. UTF8. GetString(new byte );// bool isContainsEof = ""; //hepsi gelmişse if { List mytagByte = new List ; string temp = ""; for (int p = 0; p < filebytes . Length; p++) { //if (letter. Contains(Encoding. UTF8. GetString(new byte ). ToLower //{ temp += Encoding. UTF8. GetString(new byte ); mytagByte. Add ; if (regex. IsMatch //tagımızı öğreniyoruz. //} } string whatsTag = Encoding. UTF8. GetString(mytagByte. ToArray ; //tagımızı stringe çevirme işlemi //gereksiz şeyleri veriden temizleme işlemi MemoryStream tmpMemory = new MemoryStream ; tmpMemory. Write(filebytes , 0, filebytes . Length); tmpMemory. Write(Encoding. UTF8. GetBytes , 0, Encoding. UTF8. GetBytes . Length); ms. Flush ; ms. Close ; ms. Dispose ; ms = new MemoryStream(RemoveBytes(ms. ToArray , tmpMemory. ToArray ; memos = new MemoryStream ; ms. CopyTo ; tmpMemory. Flush ; tmpMemory. Close ; tmpMemory. Dispose ; filebytes = RemoveBytes(filebytes , mytagByte. ToArray ; filebytes = RemoveBytes(filebytes , Encoding. UTF8. GetBytes ; // son olarak veriyi işlediğimiz yer. DataInvoke ; } } catch } }); } public static byte Separate { var Parts = new List ; var Index = 0; byte Part; for (var I = 0; I < source. Length; ++I) { if (Equals } Part = new byte ; Array. Copy(source, Index, Part, 0, Part. Length); Parts. Add ; return Parts. ToArray ; } static bool Equals public static byte RemoveBytes { if (pattern. Length 0) return input; var result = new List ; for (int i = 0; i < input. Length; i++) { var patternLeft = i input != t). Any else } return result. ToArray ; } Kod: public v0id DataInvoke { switch(tag. Split ) }