Canonical vydal (email) Ubuntu 26.10 Stonking Stingray. Přehled novinek v poznámkách k vydání. Jedná se o průběžné vydání s podporou 9 měsíců, tj. do července 2027.
České Radiokomunikace (CRA) ve čtvrtek odstřelily rozhlasový vysílač Liblice B, dosud nejvyšší stavbu v Česku. O demolici dvou 355 metrů vysokých stožárů rozhodly z důvodu jejich nevyužívání, už v úterý přitom zhasly a demontovaly jejich osvětlení.
Microsoft Defender nově podporuje linuxové desktopy.
Oficiální Epic Games Launcher je v nové preview verzi poprvé dostupný i pro Linux (FAQ). Pracuje se na novém Easy Anti-Cheatu pro Linux (EAC Linux v2) a podpoře hry Fortnite na Linuxu.
Desktopové prostředí KDE Plasma bylo vydáno ve verzi 6.8. Novinky zahrnují lepší podporu vzdálené plochy, sdílení a nahrávání obrazovky a řadu drobností napříč uživatelským rozhraním (úplný seznam změn, shrnutí ve wiki).
Apple představil 7palcový displej Apple HomeView s podporou Apple Intelligence a Siri AI pro ovládání chytré domácnosti, novou řadu vybavení chytré domácnosti Apple Home Collection, další generaci HomePodu mini a novou Apple TV 4K. Apple HomeView není v Evropské unii v prodeji, jelikož umělá inteligence Siri v rámci systému iOS v EU momentálně není k dispozici. Apple spolupracuje s EU a snaží se najít cestu, jak situaci vyřešit.
KDE slaví 30 let. Přesně před 30 lety, 14. října 1996, poslal Matthias Ettrich do diskusní skupiny comp.os.linux.misc zprávu, která započala historii projektu KDE. Důležité milníky jsou zobrazeny na časové ose.
Byl vydán Mozilla Firefox 158.0. Stejně jako Chrome 155 s podporou JPEG XL (test). Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 158 bude brzy k dispozici také na Flathubu a Snapcraftu.
Svobodný kancelářský balík ONLYOFFICE (Wikipedie) byl vydán ve verzi 10.0. Jak online Docs, tak i offline Desktop Editors. Přehled novinek také na YouTube.
Mozilla představuje Firefox Enterprise určený jako podnikový prohlížeč pro organizace s přísnými požadavky na bezpečnost, správu a dodržování předpisů. S profesionální podporou. Dostupný je zatím ve Francii, Německu, Rakousku a Švýcarsku.
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: