Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema
Insta360 Luna Ultra integra un sensore da 1 pollice 8K, ottiche Leica e triplo chip IA. Tra schermo OLED rimovibile, workflow I-Log a 10 bit e stabilizzazione a tre assi, analizziamo le doti tecniche di una gimbal camera pensata per i professionisti
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-04-2007, 11:57   #1
nicolo_conte
Member
 
L'Avatar di nicolo_conte
 
Iscritto dal: Jan 2007
Città: Mariano Comense (Co)
Messaggi: 239
[C] Esercizio programmazione di rete

Ciao a tutti,
devo creare il seguente programma:

Quote:
Progettare, codificare in linguaggio C e collaudare un programma eseguito da un processo padre SRV e da due processi server SRV_X (1 o 2).
Ciascun processo SRV_X gestisce un canale CNL_X tra se stesso e un cliente di verifica CLI_X. Il problema utilizza l’allegato ‘term.txt’:

1)SRV ha il ruolo di server studente e deve servire in parallelo due richieste di servizio da parte di due clienti di verifica diversi CLI_X.
2)SRV si pone in attesa di collegamento da parte dei processi CLI_X sulla porta TCP XXXXX.
3)Per una generica richiesta di connessione X, SVR_X utilizza il canale di rete CNL_X aperto con CLI_X per eseguire i processi seguenti:

a)SRV_X entra in un ciclo nel quale svolge le seguenti azioni:

I)Riceve da CLI_X, sul canale CNL_X, una sequenza di caratteri terminata dal carattere newline (‘\n’) e di lunghezza massima 5. Tale sequenza, convertita in formato numerico, rappresenta un indice IDX (vedi nota per la conversione).
II)Apre il file ‘term.txt’, ricevuto come allegato al testo del problema, legge il carattere alla posizione IDX e lo memorizza, quindi chiude il file. Il carattere letto, indicato nel seguito come CH_TERM, ha il significato di ‘terminatore’ per i messaggi successivi.
III)Riceve da CLI_X, sul canale CNL_X, una sequenza di caratteri CH_SEQ di lunghezza max 64, il cui ultimo carattere è il ‘terminatore’ CH_TERM precedentemente letto da file.
IV)Conta il numero di caratteri della sequenza CH_SEQ, compreso il carattere ‘terminatore’ CH_TERM.
V)Invia a CLI_X, sullo stesso canale CNL_X, il numero di caratteri ricevuti, compreso il carattere ‘terminatore’ CH_TERM (vedi nota per la conversione).

b)Il ciclo termina quando SRV_X legge dal file un carattere terminatore CH_TERM uguale a ‘q’.
c)Il processo SRV_X chiude il canale di rete CNL_X e termina.

4)Il processo SRV_X non attende il termine dei servizi, ma chiude il canale usato e termina.

Si tenga presente che:

I clienti di verifica CLI_X funzionano sempre correttamente.
I clienti di verifica CLI_X si aspettano di ricevere la corretta lunghezza della stringa inviata CH_SEQ.
Per la conversione di una sequenza di caratteri numerici nel corrispondente valore interno si utilizzi la funzione:
int atoi(char *str);

Il numero da inviare deve essere convertito in una sequenza di caratteri terminata da newline (‘\n’). Utilizzare per la conversione la funzione ‘sprintf’:

int sprintf(char *buffer, char *format, [argument, …]);

Per la conversione utilizzare come specificatore di formato la stringa “%d\n”.
Se i clienti di verifica CLI ricevono dati diversi da quelli attesi, essi chiudono il canale CNL e terminano immediatamente.
una volta compilato il programma nel laboratorio vi è un verificatore che "verifiuca" il corretto funzionamento del programma. Se riusciste a darmi una mano sarebbe un sollievo visto che ormai ci sto "sbattendo la testa" da una settimana! Che errori vi sono?
nicolo_conte è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2007, 11:58   #2
nicolo_conte
Member
 
L'Avatar di nicolo_conte
 
Iscritto dal: Jan 2007
Città: Mariano Comense (Co)
Messaggi: 239
E questo è il codice da me scritto:

Codice:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define PORT 4000
#define MAXCONN 5

void addr_initialize(struct sockaddr_in * pt, unsigned int TCP_port, unsigned int IP_addr){

pt->sin_family = AF_INET;
pt->sin_port = htons ((unsigned short int) TCP_port);
pt->sin_addr.s_addr = IP_addr;
}

int main (){

FILE *file; /*INIZIO DICHIARAZIONE VARIABILI*/
struct sockaddr_in server_addr, cli_addr;
int client_len = sizeof (cli_addr);
int sd, new_sd, i, u, m, pid, teminatore;
char ch_term [5], ch_recv[64], num_char[10]; /*FINE DICHIARAZIONE VARIABILI*/

addr_initialize (&server_addr, PORT, INADDR_ANY);
sd = socket (AF_INET, SOCK_STREAM, 0); /*CREAZIONE DEL SOCKET SD*/
bind (sd, (struct sockaddr *) &server_addr, sizeof (server_addr);
listen (sd, MAXCONN); /*SI PONE IN ATTESA DI EVENTUALI CONNESSIONI*/

for (i = 0; i < 2; i++){ /*ACCETTA DUE CONNESSIONI*/

new_sd = accept (sd, (struct sockaddr *) &client_addr, &client_len);

pid = fork (); /*ESECUZIONE DELLA FUNZIONE FORK*/

if (pid == 0){ /*PROCESSO FIGLIO*/

for (u = 0; ch_term [u] != '\n'; u++){ /*RICEVE UN CARATTERE ALLA VOLTA FINO A '\N'*/
recv (new_sd, ch_term [u], 1, 0); /* E LO IMMAGAZZINA IN CH_TERM*/
}

terminatore = atoi (ch_term); /*TRASFORMA IN INT CH_TERM*/

file = fopen ("~/term.txt", "r"); /*APRE IL FILE TERM.TXT IN SOLA LETTURA*/
fseek (file, terminatore, SEEK_SET); /*SI SPOSTA DI UN VALORE TERMINATORE NEL FILE*/
fscanf (...) /*COME LEGGO IL CARATTERE????*/

for (m = 0; ch_recv [m] != /*dal terminatore*/ || ch_term [m] != 'q'; m++){
recv (new_sd, ch_recv[m], 1, 0);
}

sprintf (num_char, "%d\n", m);

send (num_char, m, 10, 0);

close (new_sd);

exit (0);
}

else close (sd);
}
}

Ultima modifica di nicolo_conte : 02-04-2007 alle 12:04.
nicolo_conte è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2007, 11:58   #3
nicolo_conte
Member
 
L'Avatar di nicolo_conte
 
Iscritto dal: Jan 2007
Città: Mariano Comense (Co)
Messaggi: 239
sono un pò titubante sul modo di ottenere il carattere dal file e soprattutto se i cicli che ho creato portano effettivamente a qualcosa! Grazie mille a tutti coloro che avranno la pazienza di aiutarmi
nicolo_conte è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Insta360 Luna Ultra: la potenza del sensore da 1 pollice incontra la portabilità estrema Insta360 Luna Ultra: la potenza del sensore da 1...
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
AMD: l'alternativa al DLSS 5 sarebbe in ...
Canon EOS R8 Mark II: sensore da 24,2 MP...
Alla Napoli Shipping Week 2026 arriva il...
Addio bollo: il Governo cancella la tass...
Speciale Logitech G: mouse PRO X SUPERLI...
Cosa pensano Altman, Amodei, Benioff e H...
Microsoft: evento il 7 ottobre dedicato ...
Scoperti 84 corpi cosmici anomali: cosa ...
Dimensity 9600 Pro contro A20 Pro, il nu...
HillMiles MileCity1 torna a 648,99€: e-b...
Enel Mobile, il debutto è sempre ...
Nuova rimodulazione per il fisso di TIM ...
iPhone 18 Pro e Pro Max, preordini sotto...
Ha craccato 26 giochi: ora Denuvo vuole ...
Xiaomi 18 Pro, il lancio è uffici...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 19:31.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v