Új hozzászólás Aktív témák
-
sztanozs
veterán
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
-
sztanozs
veterán
Ok, akkor beírod a Class-t bepirosítja, majd nyomsz egy
Shift + Alt + F10
-et, vagyCtrl + .
-ot.Vagy felüldefiniálod a
View.ShowSmartTag
-et (Tools > Options > Environment > Keyboard), és akkor lehetCtrl + Space
is (ami VS-ban mondjuk a CompleteWord action).[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
Itt is van: CryptoStream, még példa is van a cikk alján.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
Próbáld meg az AES-t (vagy AESManaged-et) használni a Rijndael helyett, és úgy felkonfigurálni, ahogy a példában van.
Ráadásul a Java-s megoldás nem közvetlenül a key-t használja, hanem egy abból derivált (PBKDF2WithHmacSHA1) kulcsot, amihez kell salt is:int iterations = 128;
Rfc2898DeriveBytes rfc2898 = new Rfc2898DeriveBytes(enc_key, salt, iterations);
byte[] key = rfc2898.GetBytes(32);Ezt próbáld meg illeszteni a kódodhoz.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
byte vs sbyte - a C# mindenhol byte-tal számol az sbyte csak speciális helyekre kell. De ha a Java tényleg signed byte-ot ad vissza (-128 - 127), akkor persze ezzel mókolni kell (de ez ugye csak reprezentáció - egy fájlba/stream-be mindegy, hogy byte-ként vagy sbyte ként írsz, a végeredmény ugyanaz lesz.
másrészt nekem úgy rémlik, hogy a GZip nem ZLib kompatibilis, nem is csodálkozom, hogy hibát dob.
A deflate pedig csak raw deflate bytestream-re használható, a headereket le kell vágni.ZIP-re külső csomagokat érdemes használni: [link]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
-
togvau
senior tag
Na sikerül dekódolni fejben, szóval. Minden string előtt van egy #00, és még egy hex szám ami a string hosszúságát jelöli (nem tudom, hogy byte e vagy karakter, de mivel nincsenek speciális karakterek ezért ebben az esetben a byte és karakterszám az ugyan az) , és ez után jön maga a string.
[ Szerkesztve ]
hitler, sztálin, micro usb
-
togvau
senior tag
Érdekes fejlemény, de ha átlépem a 00-kat readByte()-al, akkor beolvassa a stringet
Tehát így működik:
reader.ReadByte();
hashlink = reader.ReadString();
reader.ReadByte();
string mpass = reader.ReadString();
//soronként a fájl végéig˘˘
reader.ReadByte();
string user = reader.ReadString();
reader.ReadByte();
string pass = reader.ReadString();
reader.ReadByte();
string id1 = reader.ReadString();
reader.ReadByte();
string id2 = reader.ReadString();
bool notify = reader.ReadBoolean();[ Szerkesztve ]
hitler, sztálin, micro usb
-
sztanozs
veterán
Ha csak az első ketőt hagyod ki, akkor is meg kellene egye UTF16-ként (mivel ez pont az a reprezentáció)
Sima ascii-ből 0x00 + karaktert csinál (leegyszerűsítve).
Példa tábla első sora: [link]
UTF-16 Big Endian[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
Kihagyva a 0-kat az ACSII (nagyjából), ha feltolod valahova fájlba kiírva lehet, hogy elszórakoznék vele
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
amargo
addikt
-
amargo
addikt
ctrl-space-re nem tudja megfelelő usingot beszúrni
tudja, vagy itt most gondolatolvasást vársz (?), még azt is kiírja, hogy névütközés van és válaszd ki melyikre is gondoltál, persze, ha nincs ütközés, akkor egyből berakja. De, ha egy példát mutatsz az még érdekes lehet.nem tud normális hibaüzenetet sem megjeleníteni ha valamelyik paraméter rossz
Itt megint user errort érzek, még soha nem volt ilyen gondom tekintve, hogy egy manage-d nyelvről beszélünk, mutass egy példát kérlek.Na meg néha újra kell indítani, mert beragad minden, semmit se csinál kiegészítésre, és a javított hibák aláhúzása is megmarad amíg újra nem indítom.
Igaz 2013-at csak kb 3 évig használtam, így lehet ez idő alatt valami elkerülte a figyelmem. Ha teli pakolod mindenféle 3party kiegészítővel azok tényleg összetudnak akadni, de bevallom régóta tudom, hogy az extension-ök összetudják kuszálni, ezért csak olyanokat rakok fel, amik megbízhatóak.
Nálam a 2015-ös csinált hasonlót, amikor 550 projektes sln-el kellett dolgozni.Egyedül a 2017-ben csavartak egy kicsit a csproj-on, amit nem muszáj elvégezni. Minek teszel fel SQL server-t, ha nincs rá szükséged?
eclipsbe bevallom nem merek beleszólni, azt csak 4 éve használom.. sajnos jó párszor kell.
(#7737) togvau:
Pont erre írtam, hogy még nem értesz hozzá, ez nem szemre hányás. Én utoljára using-ot '08-ba írtam be kézzel..[ Szerkesztve ]
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
-
lord.lakli
őstag
-
amargo
addikt
ctrl + .
De felajánlja csak még nem tudod, hogy mit és hol. [link]De ebből érdemes elindulni még: [link]
Exception: gyanítom a View Details-ra még soha nem kattintottál az exception ablakba.Nekem csak ez szúrt, szemet, hogy nem értesz az IDE-hez és fikázod. Több "hobby" programozó barátom is maguktól rájöttek ezekre. Fura.
A programozásban majd más segít, ha akar.“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
-
-
amargo
addikt
Próbáld ki a Rider az java-s.
Olvass utána kérlek, hogy lehet előhozni avagy mit kapcsoltál ki az exception-höz, ez egy általános tanács.
szerk:
inkább kitöröltem, a többit.[ Szerkesztve ]
“The workdays are long and the weekend is short? Make a turn! Bike every day, bike to work too!”
-
sztanozs
veterán
[link] - egy darab pipát kell dobni az elején, ha mindent szeretnél elkapni. És amúhy miért jó, ha kidumpolja az exception-t és leáll? Nem értelmesebb elkapni a kivételt úgy, hogy meg tudd nézni a tényleges kontextust, le tudd csekkolni az összes változót, példányosított osztályt, stb???
Erre a Parallel.ForEach-re dobhatnál egy példát. Lehet, hogy csak a változókezeléssel van gond.
[ Szerkesztve ]
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
togvau
senior tag
Ha várok 1 percet, akkor dob egy webexception "The operation has timed out"-ot a
private static Stream ConvertToStream(string fileUrl)
{
try
{
if (DEBUG) Console.WriteLine("ConvertToStream: "+fileUrl);
return new WebClient().OpenRead(fileUrl);
}
catch (Exception ex) {
throw ex;
}
}
És így kiderül melyik fájlnál akad el, de a probléma az, hogy a dobott linket böngészőbe írva, simán letöltődik a fájl, és pont ugyanonnan hasonló fájlok (még nagyobbak) letöltése is simán megy a C# programból is. Gyak 21 fájlt kéne letöltenie, és a 19.-nél akad el. Ha nincs párhuzamosság, akkor végigmegy.[ Szerkesztve ]
hitler, sztálin, micro usb
-
sztanozs
veterán
Több oka is lehet, hogy a webclient beakad - a hibát le kell kezelni és újrapróbálni.
Másrészt a WebClient nem biztos, hogy az ideális megoldás. Itt van egy két szebb/gyorsabb: [link]JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
martonx
veterán
Nem tartom jó jelnek, hogy a static metódusodban mindig újból csinálsz egy webclient-et. Ez lehet, hogy egy szálon nem okoz gondot, több szálon viszont simán lehet, hogy összeakad valami valahol..
A helyedben a webclient-et egy példányban hoznám létre, és azt használnám újra és újra.Másrészt webről fileok letöltésénél a szűk keresztmetszet úgyis a sávszélesség, nem pedig a processzor kihasználtság, szóval szerintem ez az a tipikus helyzet, ahol felesleges párhuzamosítással felesleges komplexitást hozol be a rendszerbe, nulla hozzáadott értékkel.
Majd amikor a fileokat parsolni akarod, vagy mittudomén, ott lesz értelme a párhuzamosításnak, de itt most éppen nincs értelme.Én kérek elnézést!
-
sztanozs
veterán
Bele kell piszkálni a timeoutba, és máris nem kell várni 100 mp-et...
Timeout bármilyen (web)helyzetben előfordulhat, le kell rendesen kezelni.JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
sztanozs
veterán
Szerintem felesleges ezen vitázni.
Egyrészt a WebClient helyett ajánlott valami mást használni (túl nehézsúlyú, másrészt elég elavult), másrészt az esetleg előforduló timeoutot (mint ahogy egy többszálú letöltőprogram is) kezelni kell.
JOGI NYILATKOZAT: A bejegyzéseim és hozzászólásaim a személyes véleményemet tükrözik; ezek nem tekinthetők a munkáltatóm hivatalos állásfoglalásának...
-
-
-
martonx
veterán
Pont ez a lényeg. Ha valami async, akkor az adjon vissza Task-ot. Viszont bármikor odabiggyeszteheted a .Result-ot az async metódusod meghívásának a végére, és máris normál változót fogsz visszakapni, mert látom ez a mániád.
Azaz pl. MyMethodAsync()-et kétféleképpen tudod használni:
1. szép async módon:
var a = await MyMethodAsync();2. csúnyán direktben syncesítve vállalva az esetleg háttérbeli async problémákat, ha egyébként minden más metódusod async fut:
var a = MyMethodAsync().Result;Azaz ha mindenképpen "szép" változó típust akarsz visszakapni a .Result-al bárhol rövidre tudod zárni az asyncosítást.
Én kérek elnézést!
-
őstag
Csináltam egy ConsoleApp példát:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
ServicePointManager.DefaultConnectionLimit = int.MaxValue;
var files = new[]
{
new Uri("http://ipv4.download.thinkbroadband.com/10MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:81/10MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:8080/10MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com/10MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:81/20MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:8080/20MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com/50MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:81/50MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:8080/50MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com/100MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:81/100MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:8080/100MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com/200MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:81/200MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:8080/200MB.zip")
};
Console.WriteLine("Start");
Parallel.ForEach(files, file =>
{
var tempFile = Path.GetTempFileName();
using (var wc = new WebClient())
{
Console.WriteLine($"Starting download: {file} to {tempFile}...");
wc.DownloadFile(file, tempFile);
Console.WriteLine($"End download: {file}, local path: {tempFile}");
}
//File.Delete(tempFile);
});
Console.WriteLine("End");
}
}
}Ez szépen kipörgeti amit a netem bírt, és párhuzamosan tölti le a minta fájlokat.
Több gond van a bemásolt kódoddal (mindamellett, hogy a teljesen nem másoltad be, ezért az összkép sem lehet teljes a működésről, és vannak benne zavaros dolgok):
- using-ot kellene használni
- Task.Factory.StartNew pedig el van indítva, de sehol sincsen bevárva. Task.Run javallottabb, illetve az async-await kulcsszavak használata. De ha még nagyon új a C#, lehet hanyagolni kellene egyelőre.
- AConvertToStream
környékén is valószínűleg voltak problémák, nem olyan triviális az átalakítás.
-ServicePointManager.DefaultConnectionLimit
értéke alapból 2, ha párhuzamos kérésekkel szeretnél dolgozni, érdemes átállítani.Másolj be egy teljes (működő, forduló) példát, hogy meg lehessen találni a pontos hibát. De valószínűnek tartom, hogy a fentiek egyikének hibás használata az okozó.
[ Szerkesztve ]
¯\_(ツ)_/¯
-
őstag
Azért írtam Parallel-lel, mert láthatóan valamit háttérben akartál csinálni, amit nem vártál be (
Task.Factory
await
vagy bármi egyéb nélkül (aminek következtében az utolsó néhány unzip eredménye hibás lesz, vagy egy szép 0 byte-os file)). De akkor legyen egyszálas,ServicePointManager.DefaultConnectionLimit
állítás nélkül:using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
//ServicePointManager.DefaultConnectionLimit = int.MaxValue;
var files = new[]
{
new Uri("http://ipv4.download.thinkbroadband.com/10MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:81/10MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:8080/10MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com/10MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:81/20MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:8080/20MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com/50MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:81/50MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:8080/50MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com/100MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:81/100MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:8080/100MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com/200MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:81/200MB.zip"),
new Uri("http://ipv4.download.thinkbroadband.com:8080/200MB.zip")
};
Console.WriteLine("Start");
foreach(var file in files)
{
var tempFile = Path.GetTempFileName();
using (var wc = new WebClient())
{
Console.WriteLine($"Starting download: {file} to {tempFile}...");
wc.DownloadFile(file, tempFile);
Console.WriteLine($"End download: {file}, local path: {tempFile}");
}
//File.Delete(tempFile);
}
Console.WriteLine("End");
}
}
}Ez nálam szintén folyamatosan tölt, nem malmoz két letöltés között.
A probléma eredete valószínűleg az, hogy kapcsolatokat nyitsz, amiket nem, vagy nem megfelelően zársz le, így a connection limit betelik, és megvárja egynek a felszabadulását (esetünkben valószínűleg timeout-ját). De mivel még nem láttunk teljes (minta) forduló kódot elejétől a végéig, csak részleteket, így nehéz megmondani a pontos okokat. Csinálj egy egyszerű példát, amin előáll a probléma, és arra már egyszerűbb gyógyírt mondani.
¯\_(ツ)_/¯
-
harylmu
őstag
UI-t csak UI thread-ről tudsz updatelni, Dispatcher-rel. Amúgy exceptionre dobsz egy google-t ki is hozza.
Hasonló kérdés volt 2 hónapja: [link]"Na meg az onclick által meghívott háttérlogika metódus blokkolja a GUI-t amíg az be nem fejezi."
Nem akarok bunkónak tűnni, de ezt nem egyszer leírtuk neked (pl itt és itt is volt figyelmeztetés).
(#7834) togvau: C#-ban getter setter láthatóságot lehet állítani.
[ Szerkesztve ]
Új hozzászólás Aktív témák
● ha kódot szúrsz be, használd a PROGRAMKÓD formázási funkciót!
- Érkezik Magyarországa az LG szuper dizájnos hordozható projektora
- World of Tanks - MMO
- Otthoni hálózat és internet megosztás
- Ukrajnai háború
- Stellar Blade
- AMD off topik: VGA, CPU, APU és minden, ami AMD
- AMD K6-III, és minden ami RETRO - Oldschool tuning
- Így építsd a billentyűzeted!
- Linux felhasználók OFF topikja
- Bemutatkozott a Moto G32 4G
- További aktív témák...
Állásajánlatok
Cég: Promenade Publishing House Kft.
Város: Budapest
Cég: Ozeki Kft.
Város: Debrecen