KiCad je nově k dispozici také jako balíček ve formátu AppImage. Stačí jej stáhnout, nastavit právo na spouštění a spustit [Mastodon, 𝕏].
Šenčenská firma Seeed Studio představila projekt levného robotického ramena reBot Arm B601, primárně coby pomůcky pro studenty a výzkumníky. Paže má 6 stupňů volnosti, dosah 650 mm a nosnost 1,5 kilogramu, podporované platformy mají být ROS1, ROS2, LeRobot, Pinocchio a Isaac Sim, krom toho bude k dispozici vlastní SDK napsané v Pythonu. Kompletní seznam součástek, videonávody a nejspíš i cena budou zveřejněny až koncem tohoto měsíce.
… více »Byla vydána nová verze 36.0, tj. první stabilní verze nové řady 36, svobodného multimediálního centra MythTV (Wikipedie). Přehled novinek a vylepšení v poznámkách k vydání.
Byl vydán LineageOS 23.2 (Mastodon). LineageOS (Wikipedie) je svobodný operační systém pro chytré telefony, tablety a set-top boxy založený na Androidu. Jedná se o nástupce CyanogenModu.
Od března budou mít uživatelé Discordu bez ověření věku pouze minimální práva vhodná pro teenagery.
Evropská komise (EK) předběžně shledala čínskou sociální síť pro sdílení krátkých videí TikTok návykovým designem v rozporu s unijním nařízením o digitálních službách (DSA). Komise, která je exekutivním orgánem Evropské unie a má rozsáhlé pravomoci, o tom informovala v tiskovém sdělení. TikTok v reakci uvedl, že EK o platformě vykreslila podle něj zcela nepravdivý obraz, a proto se bude bránit.… více »
Offpunk byl vydán ve verzi 3.0. Jedná se o webový prohlížeč běžící v terminálu a podporující také protokoly Gemini, Gopher a RSS. Přibyl nástroj xkcdpunk pro zobrazení XKCD v terminálu.
Promethee je projekt, který implementuje UEFI (Unified Extensible Firmware Interface) bindingy pro JavaScript. Z bootovacího média načítá a spouští soubor 'script.js', který může používat UEFI služby. Cílem je vytvořit zavaděč, který lze přizpůsobit pomocí HTML/CSS/JS. Repozitář se zdrojovými kódy je na Codebergu.
Zpráva Justičního výboru Sněmovny reprezentantů upozorňuje na cenzurní kampaň Evropské komise, mířenou proti svobodě projevu na sociálních sítích. V dokumentu se uvádí, že se Evropská komise během posledních šesti let účastnila více než 100 uzavřených jednání, během nichž po platformách požadovala úpravy pravidel moderování obsahu, přičemž toto úsilí Komise zahrnovalo i cenzuru politických názorů a pravdivých informací. Výbor zdůrazňuje, že tento přístup Bruselu ohrožuje ústavou zaručená práva Američanů na svobodu projevu.
Linus Torvalds vydal jádro Linux 6.19. Podrobný výčet změn je ke zhlédnutí na stránce Kernel Newbies, stručné výběry v LWN (část první, druhá).
unsigned int inaddr;
struct hostent *ph;
struct sockaddr_in my_addr;
if ((inaddr = inet_addr(addr))!=INADDR_NONE)
ph=gethostbyaddr((char *)&inaddr, sizeof(unsigned int), AF_INET);
else ph=gethostbyname(addr);
if (ph) {
cout << "Connecting to " << ph->h_name << endl;
}
else {
cerr << "Unable to connect " << ph->h_name << ", not in name list." << endl;
return false;
}
if ((m_iSocket = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP))<0) {
cerr << "Can not open socket." << endl;
return false;
}
bzero((char *) &my_addr, sizeof(my_addr));
my_addr.sin_family = AF_INET;
my_addr.sin_addr.s_addr = INADDR_ANY;
my_addr.sin_port = htons(4000);
if (connect(m_iSocket, (struct sockaddr *) &my_addr, sizeof(my_addr)) < 0) {
cerr << "Can\'t connect." << endl;
close(m_iSocket);
return false;
}
Potom server nějak (nevím jak, mám jen binárku) odesílá data a já je v klientovi přijímám takto:
...
struct Message {
long id;
unsigned short seq;
unsigned short ack;
char flag;
char data[256];
};
...
Message buf;
for (int i = 0; i < 256; i++) {
buf.data[i] = m_mRecMsg.data[i] = 0;
}
int ret = read(m_iSocket, (void *)&buf, sizeof(buf));
cout << "Pocet prijatych bajtu: " << dec << ret << " z " << sizeof(buf) << endl;
if (ret < 0) {
cerr << "Error reading from socket." << errno << endl;
return false;
}
m_iLastRecvDataLength = ret - sizeof(long) - 2*sizeof(short) - 1;
if (m_iLastRecvDataLength > 0) {
strncpy(m_mRecMsg.data, buf.data, m_iLastRecvDataLength);
}
m_mRecMsg.ack = ntohs(buf.ack);
m_mRecMsg.flag = buf.flag;
m_mRecMsg.id = ntohl(buf.id);
m_mRecMsg.seq = ntohs(buf.seq);
printMsg(m_mRecMsg);
return true;
Je to výňatek z programu, ale pro ilustraci by to mělo snad stačit.
Problém je v tom, že server odešle 256B dat + 9B hlavičku, klient by je měl tedy přijmout. návratová hodnota z read dokonce potvrzuje, že přijala 265B dat. Ale přesto jsou data neúplná. V poli data je někdy jen určitý počet (asi tak 100-150) platných bajtů a zbytek jsou nuly.
Vypadá to například takhle:
server:
F1EA0006 SEND 127.0.0.1:41229 seq=18176 ack=0 flags=00 data(256): 5b 7b 15 f6 8d 00 41 80 ... 6f 73 a6 73 60 60 77 7a
klient:
Pocet prijatych bajtu: 265 z 268
Prijata: f1ea0006 0 18176 0 data(256):5b 7b 15 f6 8d ... 0 0 0 0 0 0 0 0 0 0
Může za to read? Nebo mám něco principiálně špatně? Vím, že u TCP se muselo číst po bajtech, ale UDP se snad nesmí ne?
Budu moc vděčný za každou radu, už se s tím morduju 2 dny.
sendto a recvfrom se používají, jenom pokud nepoužijete connect, jinak můžete klidně používat send a recv, resp. jejich ekvivalenty write a read.
Chyba bude v použití strncpy, to totiž skončí na prvním null bajtu. Použijte memcpy. Případně raději použijte nějaký postup z C++.
Tiskni
Sdílej: