|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Oggiona
Messaggi: 755
|
programmino scolastico client server
compilo con devc++, ma nella riga struct sockaddr_in server; il compilatore mi da questo errore "storage size of 'server' isn't known" che diavolo significa? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Oggiona
Messaggi: 755
|
non avevo la libreria netinet/in.h ...
ora pero' mi da un sacco di errori di linker... provo a postare il codice Codice:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#define PORT 4000
void main(int argc,char *argv[])
{
struct sockaddr_in server;
int sd,errore,i;
char c;
FILE *punt;
server.sin_family=AF_INET;
server.sin_port=htons((u_short)PORT);
server.sin_addr.s_addr=inet_addr(argv[1]);
sd=socket(AF_INET,SOCK_STREAM,0);
errore=connect(sd,(struct sockaddr*)&server,sizeof(server));
if (errore)
printf("Connessione non avvenuta.");
else
{
i=0;
while (argv[2][i]!='\0')
{
i++;
send(sd,&c,i,0);
}
c='*';
send(sd,&c,1,0);
punt=fopen(argv[3],"w");
i=recv(sd,&c,1,0);
while(i>0)
{
fprintf(punt, "%c",c);
c=recv(sd,&c,1,0);
}
fclose(punt);
close(sd);
}
}
|
|
|
|
|
|
#3 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
eeeeehhhhhhh??????? ma che hai incluso??
ma scusa, includi semplicemente winsock.h e poi linka a ws2_32.lib ... sei su Windows mica su Linux...
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Oggiona
Messaggi: 755
|
ah si?
io ho provato a scrivere il programma che il prof ha scritto alla lavagna il prof e' bravo ed e' stato capace di farmi capire quasi tutto, ma non ci ha detto che il programma andasse sotto linux...
|
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Oggiona
Messaggi: 755
|
mi da gli errori piu' strani.. il linker.. le librerie boh...
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
devi passare in compilazione -l e la libreiria dll che ti hanno segnalato prima.
se ci dici con cosa compili possiamo esserti di maggiore aiuto ciao
__________________
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Oggiona
Messaggi: 755
|
uso devc++ 4.9.9.2
ho provato a togliere un po di include e a mettere il winsock.h Codice:
#include <stdio.h>
#include <winsock.h>
#define PORT 4000
void main(int argc,char *argv[])
{
struct sockaddr_in server;
int sd,errore,i;
char c;
FILE *punt;
server.sin_family=AF_INET;
server.sin_port=htons((u_short)PORT);
server.sin_addr.s_addr=inet_addr(argv[1]);
sd=socket(AF_INET,SOCK_STREAM,0);
errore=connect(sd,(struct sockaddr*)&server,sizeof(server));
if (errore)
printf("Connessione non avvenuta.");
else
{
i=0;
while (argv[2][i]!='\0')
{
i++;
send(sd,&c,i,0);
}
c='*';
send(sd,&c,1,0);
punt=fopen(argv[3],"w");
i=recv(sd,&c,1,0);
while(i>0)
{
fprintf(punt, "%c",c);
c=recv(sd,&c,1,0);
}
fclose(punt);
close(sd);
}
}
come si fa a includere una libreria?? fino a oggi ho solo incluso file .h (quindi immagino solo headers) |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: May 2003
Messaggi: 118
|
passare a linux no?...
__________________
forum che tratta di calcolatrici grafiche in genere: consigli e aiuti www.helpcalculator.tk |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Oggiona
Messaggi: 755
|
sto pensando di fare una partizione per linux, ma preferirei far girare il programmino anke su windows...
|
|
|
|
|
|
#10 |
|
Senior Member
Iscritto dal: Jan 2006
Città: Lassù
Messaggi: 2842
|
Anzitutto la gestione del winsock è leggermente diverso dalla programmazione di rete in linux. Prima di usare le funzioni di winsock, bisogna preliminarmente usare la seguente funzione che non fa altro che inizializzare la windows socket.
int winDLLstart(){ WORD wVersionRequested; WSADATA wsaData; int err; wVersionRequested = MAKEWORD(2, 0); err = WSAStartup(wVersionRequested, &wsaData); return(err); } Come potrai notare, sono nient'altro che luride convenzioni che Microsoft ha imposto ai programmatori windows. La parte importante è la WSAStartup(). per linkare la libwsock32.a fai...Progetto-->opzioni del progetto-->Parametri -->aggiungi libreria-->libwsock32.a
__________________
Fa' che non turbi l'anima tua il triste spettacolo dell'ingiustizia umana; anch' essa, nell'economia divina, ha il suo valore. È sopra di essa che vedrai sorgere immancabilmente la giustizia di Dio. HO CONCLUSO EGREGIAMENTE TRATTATIVE CON OLTRE 90 UTENTI! ATTENZIONE: consiglio di evitare assolutamente trattative con l'utente Herant |
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Oggiona
Messaggi: 755
|
ora sembra andare almeno la compilazione
ora provo a creare il programma server e faccio qualke esperimento grazie 1000 |
|
|
|
|
|
#12 |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
mi sa che mi sono sbagliato: il nome dell'header dovrebbe essere winsock2.h (mi so perso un 2); winsock.h è una sua vecchia versione. per quello che devi fare tu non dovrebbe cambiare nulla, ma non si sa mai. comunque come altri ti hanno giustamente detto, la gestione dei socket tra Windows e Linux presenta differenze piccole e molto bastarde (su Linux un valore di ritorno nullo vuol dire una cosa e su Windows vuol dire l'opposto) percui ci devi andare di #ifdef, ma io preferirei lavorare come dice il tuo professore; se proprio non vuoi fare il dual boot (e ti capisco) installati VMWare Workstation (se non erro ne esiste una versione gratis).
|
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Oggiona
Messaggi: 755
|
il server crasha dandomi un errore di segmentazione (accede a memoria non sua?)
Codice:
#include <stdio.h>
#include <winsock2.h>
#define PORT 4000
#define MAXC 15
void main(void)
{
int winDLLstart(){
WORD wVersionRequested;
WSADATA wsaData;
int err;
wVersionRequested = MAKEWORD(2, 0);
err = WSAStartup(wVersionRequested, &wsaData);
return(err);
}
struct sockaddr_in server,client;
int sd,new_sd,errore,i,j,client_len;
char c,nomefile[100];
FILE *punt;
server.sin_family=AF_INET;
server.sin_port=htons((u_short)PORT);
server.sin_addr.s_addr=INADDR_ANY;
sd=socket(AF_INET,SOCK_STREAM,0);
bind(sd,(struct sockaddr*)&server,sizeof(server));
listen(sd,MAXC);
while(1)
{
new_sd=accept(sd,(struct sockaddr*)&client,&client_len);
i=recv(new_sd,&c,1,0);
j=0;
while((i>0) && (c!='*'))
{
nomefile[j]=c;
j++;
i=recv(new_sd,&c,1,0);
}
nomefile[j]='\0';
punt=fopen(nomefile, "r");
fscanf(punt,"%c",&c);
while(!feof(punt))
{
send(new_sd,&c,1,0);
fscanf(punt,"%c",&c);
}
fclose(punt);
close(new_sd);
}
}
sono anke disposto a fare il dual boot, ma dovrei svuotare un po' D: e fare un'altra partizione... e credo che faro' cosi'. Ke linux scarico pero' e che compilatore c/c++
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
ciao |
|
|
|
|
|
|
#15 | |
|
Senior Member
Iscritto dal: Aug 2005
Messaggi: 2755
|
Quote:
come compilatore c'è gcc (è da shell) e dovrebbe essere già pronto all'uso ciao
__________________
|
|
|
|
|
|
|
#16 | |
|
Bannato
Iscritto dal: Feb 2005
Città: Roma
Messaggi: 7029
|
Quote:
|
|
|
|
|
|
|
#17 | |
|
Senior Member
Iscritto dal: Oct 2001
Messaggi: 11471
|
Quote:
Cmq. se ti piace smanettare e programmare Linux è sicuramente meglio di Windows. Puoi mettere le mani al codice di tutto il sistema fino ad arrivare ai driver e il kernel. ciao |
|
|
|
|
|
|
#18 | |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Quote:
In sintesi: basta scaricare e lanciare il player...
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 12:35.











ma scusa, includi semplicemente winsock.h e poi linka a ws2_32.lib ... sei su Windows mica su Linux...








