Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto
Nothing con il suo nuovo Phone 4(a) conferma la sua identità visiva puntando su una costruzione che nobilita il policarbonato. La trasparenza resta l'elemento cardine, arricchita da una simmetria interna curata nei minimi dettagli. Il sistema Glyph si evolve, riducendosi nelle dimensioni ma aumentando l'utilità quotidiana grazie a nuove funzioni software integrate e notifiche visive. Ecco tutti i dettagli nella recensione completa
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale
Nelle ultime settimane abbiamo provato la Corsair Vanguard Air 99 Wireless, una tastiera tecnicamente da gaming, ma che in realtà offre un ampio ventaglio di possibilità anche al di fuori delle sessioni di gioco. Flessibilità e funzionalità sono le parole d'ordine di una periferica che si rivolge a chi cerca un prodotto capace di adattarsi a ogni esigenza e ogni piattaforma
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio
DEEBOT T90 PRO OMNI abbina un sistema di aspirazione basato su tecnologia BLAST ad un rullo di lavaggio dei pavimenti dalla larghezza elevata, capace di trattare al meglio le superfici di casa minimizzando i tempi di lavoro. Un robot completo che riesce anche ad essere sottile e garantire automazione ed efficienza nelle operazioni di pulizia di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 02-04-2007, 12: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, 12: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 13:04.
nicolo_conte è offline   Rispondi citando il messaggio o parte di esso
Old 02-04-2007, 12: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


Recensione Nothing Phone 4(a): sempre iconico ma ora più concreto Recensione Nothing Phone 4(a): sempre iconico ma...
Corsair Vanguard Air 99 Wireless: non si era mai vista una tastiera gaming così professionale Corsair Vanguard Air 99 Wireless: non si era mai...
Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lavaggio è ampio Ecovacs DEEBOT T90 PRO OMNI: ora il rullo di lav...
Recensione Samsung Galaxy S26 Ultra: finalmente qualcosa di nuovo Recensione Samsung Galaxy S26 Ultra: finalmente ...
Diablo II Resurrected: il nuovo DLC Reign of the Warlock Diablo II Resurrected: il nuovo DLC Reign of the...
Gli utenti Intel possono dire addio all'...
NVIDIA: raggiungeremo almeno 1 triliardo...
Lenovo presenta workstation e server con...
Nuova BMW i3: la Serie 3 elettrica debut...
NVIDIA torna in Cina: stretto un accordo...
Vibe coding nel mirino di Apple: ecco le...
Smart TV QLED 50'' a un super prezzo: 4K...
Horizon Worlds lascia i visori Quest: Me...
Lexar compie 30 anni e cambia le regole ...
Questo SSD fornisce memoria aggiuntiva a...
PlayStation Portal si aggiorna: arriva l...
Akamai, le API nel mirino dei cyber atta...
Spider-Man: Brand New Day, finalmente on...
La serie TV di Hitman è ufficialmente fe...
"Grazie e arrivederci": Sam Al...
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: 23:01.


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