Práce se zdroji má svá pravidla
malloc()
free()
Sítě jak je známe vychází z 4.2 BSD - síť je zobecněním téhož konceptu jako soubor
Zdroj musí mít nějakou rukojeť - deskriptor souboru
socket()
Zdroj namapujeme a zpřístupníme
bind()
, vazba na (IP) adresu a portZdroj používáme
listen()
, accept()
pro UDP recv()
read()
, write()
, recvfrom()
, sendto()
Zdroj uvolníme
close()
int sock = socket(AF_INET6, SOCK_STREAM, 0);
struct sockaddr_in6 listen_on = { .sin6_family = AF_INET6, .sin6_port = htons(port) };
int b_rv = bind(sock, (struct sockaddr*)&listen_on, sizeof(listen_on));
int l_rv = listen(sock, 1);
struct sockaddr_in6 client = { .sin6_family = AF_INET6 };
socklen_t client_length = sizeof(client);
int client_sock = accept(sock, (struct sockaddr*)&client, &client_length);
char message[200] = "";
const char *converted = inet_ntop(AF_INET6, client.sin6_addr.s6_addr, message, sizeof(message));
strcat(message, "\n");
write(client_sock, message, strlen(message));
close(client_sock);
close(sock);
int sock = socket(AF_INET6, SOCK_STREAM, 0);
struct sockaddr_in6 connect_to = { .sin6_family = AF_INET6, .sin6_port = htons(port) };
int p_rv = inet_pton(AF_INET6, argv[1], connect_to.sin6_addr.s6_addr);
int c_rv = connect(sock, (struct sockaddr*)&connect_to, sizeof(connect_to));
char buffer[200] = "";
ssize_t bytes_read = read(sock, buffer, sizeof(buffer));
write(STDOUT_FILENO, buffer, bytes_read);
close(sock);
int sock = socket(AF_INET6, SOCK_DGRAM, 0);
struct sockaddr_in6 listen_on = { .sin6_family = AF_INET6, .sin6_port = htons(port) };
int b_rv = bind(sock, (struct sockaddr *)&listen_on, sizeof(listen_on));
// tcp would have listen
// tcp
// client
// connected
char buffer[200] = "";
struct sockaddr_in6 client = { .sin6_family = AF_INET6 };
socklen_t client_length = sizeof(client);
ssize_t bytes_read = recvfrom(sock, buffer, sizeof(buffer), 0, (struct sockaddr *)&client, &client_length);
assert(client_length == sizeof(client));
write(STDOUT_FILENO, buffer, bytes_read);
sendto(sock, buffer, bytes_read, 0, (struct sockaddr *)&client, client_length);
close(sock);
unsigned port = strtol(argv[2], NULL, 10);
int sock = socket(AF_INET6, SOCK_DGRAM, 0);
struct sockaddr_in6 listen_on = { .sin6_family = AF_INET6 };
struct sockaddr_in6 connect_to = { .sin6_family = AF_INET6, .sin6_port = htons(port) };
int p_rv = inet_pton(AF_INET6, argv[1], connect_to.sin6_addr.s6_addr);
int b_rv = bind(sock, (struct sockaddr*)&listen_on, sizeof(listen_on));
socklen_t addrlen = sizeof(connect_to);
char message[200] = "Hello from client\n";
sendto(sock, message, strlen(message), 0, (struct sockaddr *)&connect_to, addrlen);
size_t message_length = recvfrom(sock, message, strlen(message), 0, (struct sockaddr *)&connect_to, &addrlen);
write(STDOUT_FILENO, message, message_length);
close(sock);
Studijní materiály -> cvičení 5 -> chat.py
Zrcadla:
curl -X PUT --data-binary @nekomprimovany.tar 'http://147.251.54.177:8080/proto05.py'
).Zpětná vazba jde stejným TCP kanálem nazpět.
K datům do archivu přiložte identifikačnı́ token, stažený zde.
Dohledejte RFC dle klı́če nı́že a podejte report:
vase_uco mod 8500
, pokud takové neexistuje (např. 0), pak nejbližší s vyšším ID (tedy pro 0 je to RFC 1)memo.txt
- stáhněte přímo textovou verzi.memo.json
. Report je case-sensitive.nonrfc.txt
uložte stručný report o Vámi vybraném sı́t’ovém protokolu, svým využitı́m zhruba odpovı́dajı́cı́mu aplikačnı́ vrstvě; včetně odkazu na doprovodné informace o něm.
** Tento protokol nesmí být standardizovaný formou RFC.(tato fáze obnáší 3 odevzdávané soubory - memo.txt
, memo.json
, nonrfc.txt
)
Formát souboru memo.json
:
{ "rfc": "1234", "doi": "125.456/77a8", "status": "experimental", "name": "HTTP 2.0 text mode" }
Vyhledejte všeobecně 1 zajı́mavost ze světa počı́tačových sı́tı́. Tuto popište nejméně 2 odstavci.
interesting.txt
, který přibalı́te do archivu.memo.txt
a nonrfc.txt
.MTU.txt
, který odevzdáte jako součást archivu. Stroj je nakonfigurován tak, aby měnil MTU každou 10. minutu.2022-04-24 19:30:54 1492
P.S.: