PDA

Visualizza la versione completa : [C] Client e Server


Eduadie
06-08-2018, 19:00
Volevo chiedere aiuto su un errore che ho quando provo a lanciare un semplice server e client su Linux. Spero di non aver sbagliato sezione, altrimenti correggo subito.

I codici utilizzati sono:

server.c

#include <stdio.h>#include <string.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <time.h>
int main(int argc, char **argv)
{
int ncon=0,listenfd, connfd;
struct sockaddr_in servaddr;
char buff[4096];
time_t ticks;
if ( ( listenfd = socket(AF_INET, SOCK_STREAM, 0) ) < 0 ) {
perror("socket");
exit(1);
}
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(1024);
if ( bind(listenfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0 ) {
perror("bind");
exit(1);
}
if ( listen(listenfd, 1024) < 0 ) {
perror("listen");
exit(1);
}
for ( ; ; ) {
if ( ( connfd = accept(listenfd, (struct sockaddr *) NULL, NULL) ) < 0 ) {
perror("accept");
exit(1);
}
ticks = time(NULL);
snprintf(buff, sizeof(buff), "Sei il client numero %d , %.24s\r\n", ncon,ctime(&ticks));
if ( write(connfd, buff, strlen(buff)) != strlen(buff)) {
perror("write");
exit(1);
}
close(connfd);
ncon++;
}
}




client.c


#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>


int main(int argc, char **argv)
{
int sockfd, n;
char recvline[1025] ;
struct sockaddr_in servaddr;
if (argc != 2) {
fprintf(stderr,"usage: %s <IPaddress>\n",argv[0]);
exit (1);
}
if ( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
fprintf(stderr,"socket error\n");
exit (1);
}
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(1024);
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) < 0) {
fprintf(stderr,"inet_pton error for %s\n", argv[1]);
exit (1);
}

if (connect(sockfd, (struct sockaddr *) &servaddr, sizeof(servaddr)) < 0) {
fprintf(stderr,"connect error\n");
exit(1);
}
while ( (n = read(sockfd, recvline, 1024)) > 0) {
recvline[n] = 0;
if (fputs(recvline, stdout) == EOF) {
fprintf(stderr,"fputs error\n");
exit(1);
}
}
if (n < 0) {
fprintf(stderr,"read error\n");
exit(1);
}
exit(0);
}




Quando lancio il server tramite linea di comando parte, ma quando lancio anche il client va in loop e si ferma al Connect Error...Non credo che sia un errore di codice siccome dal pc di un altro mio amico funziona tutto correttamente con i file identici.

Qualcuno sa darmi qualche dritta per risolvere? Ringrazio anticipatamente per l'aiuto.

misterx
07-08-2018, 08:16
per il client l'indirizzo IP localhost (127.0.0.1) vero?

Eduadie
07-08-2018, 18:47
Si, li lancio sulla stessa macchina entrambi...

oregon
07-08-2018, 19:53
Controlla con il comando netstat se il sistema in ascolto sulla porta 1024

Eduadie
07-08-2018, 21:39
Ho dato il comando netstat ma mi esce una sfilza di valori e credo di non aver letto la porta 1024, c' il comando specifico per avere il risultato solo della porta 1024?

oregon
07-08-2018, 22:14
Usa

netstat -l

per controllare solo le connessioni in ascolto

Eduadie
08-08-2018, 04:06
Grazie per l'interessamento, ho bisogno di risolvere.

Lanciando quel comando credo che la riga che m'interessi sia questa giusto?


tcp 0 0 0.0.0.0:1024 0.0.0.0:* LISTEN

oregon
08-08-2018, 08:33
Giusto. Assicurati che quella linea compaia solo quando hai lanciato il server e che non ci sia se il server non in esecuzione.

Eduadie
08-08-2018, 13:00
Giusto. Assicurati che quella linea compaia solo quando hai lanciato il server e che non ci sia se il server non in esecuzione.
Se non eseguo il server non mi appare quella riga.

oregon
08-08-2018, 14:08
Ok e se attivo il server ed esegui

telnet 127.0.0.1 1024

ottieni una connessione?

Loading