 | |
Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum |
[Domande] - Socket in C Clicca QUI per vedere il messaggio nel forum |
0m4r |
Domanda 1
code:
char* c
char * c
char *c
char c*
queste quattro linee di codice sono equivalenti?
Domanda 2
la e commerciale (&) posta davanti al nome di una varibile a cosa serve? quale è la sua funzione?
Domanda 3
code:
int porta = getsockbyname(s, (struct sockaddr *) &queryAddr, &queryAddrLen)
queryAddr è la struttura di tipo sockaddr_in che contine le informazioni sul client che si connette al server? se si, come le prende?se no, cosa indica?
Domanda 4
code:
bcopy(a, b, c)
copia bit a bit cioò che c'e in a dentro b per in numero di bit c?
...per ora mi fermo qui ;P |
0m4r |
ste cose nn le sa nessuno?
non è che mi deve rispondere per forza D.M., se qualcuno di Noi le sa...dica (o dico?...sottile ironia!) |
CLod |
ti posso rispondere a quella della & prima della variabile, ma nn vorrei dire una stronzata immmane
mi sembra che indichi l'indirizzo di memoria della variabile.. la funzione sinceramente nn mi ricordo quale è , però so che è una cosa fondamentale del C, ma nn essendo un manico del linguaggio ti devi accontentare di questo...
magari spider lo sa
al max aspetta D.M. o studiati bene il C :) |
Spiderweb |
1)La & è un operatore che restituisce l'indirizzo del suo operando.... ad esempio spiderweb=&pippo
mette l'indirizzo di memoria della variabile pippo in spiderweb
2) L'uso di * è corretto in tutti i casi tranne forse nell'ultimo che nn credo sia corretto
3)Beccati questo
int getsockname (int descrittore_socket, struct sockaddr* indirizzo, int* lunghezza_record_indirizzo)
Permette di ottenere tramite "indirizzo" le informazioni sull'indirizzo locale del socket. Cioe' restituisce il record contenente, ad esempio nel caso di sockaddr_in, la famiglia di indirizzi, il numero della porta, gli indirizzi internet con cui il socket interagisce.
Il parametro "lunghezza_record_indirizzo" deve puntare alla dimensione della struttura "sockaddr". In uscita conterra' un puntatore alla dimensione di tale struttura.
In caso di insuccesso, viene restituito il valore "-1", altrimenti lo zero.
La struttura "sockaddr" e' descritta con la funzione "bind".
Vediamo un esempio di utilizzo di "getsockname".
//...
int eventuale_errore;
int sock;
struct sockaddr_in temp;
int dim=sizeof(temp);
...
eventuale_errore=getsockname(sock, (struct sockaddr*) &temp, &dim);
//In temp ci sono le informazioni sul protocollo, porta e indirizzi
//...
Spero sia questo quello che chiedevi
4)bcopy |
0m4r |
grazie Spider, anche se la 3 ancora nn mi è molto chiara... |
D.M. |
a grande richiesta .... sembrerebbe
domanda 1:
il C non tiene conto degli spazi, quindi le versioni 1,2 e 3 sono equivalenti, la versione 4 è un errore di battitura.
Si veda "Il linguaggio C", introduzione
domanda 2:
&A è l'indirizzo della variabile A, serve a dare la possibilità ad una funzione di scrivere in una zona di memoria nota solo al chiamante
Si veda "Il linguaggio C", paragrafo 5.1
e.g. il secondo parametro della read(2) dice alla funzione DOVE mettere i dati che arrivano dalla socket.
domanda 3:
spiderweb ha risposto in maniera corretta, ad ogni modo si veda la slide 11 della quinta sezione delle mie slide.
la funzione comunque si chiama getsockname() e non getsockbyname()
domanda 4:
il terzo parametro è il numero di BYTE, si veda "man bcopy".
D.M. |
|
|
|
|