C, Sockets: Connexion Refusée erreur

J'ai un module d'acquisition de données à partir de laquelle je voudrais recueillir des données à partir du port Ethernet. Je vais y venir dans les étapes, actuellement, je voudrais juste connect au serveur à partir d'un client. J'ai utilisé Beej du guide pour obtenir le C de base de code. Mais je reçois cette erreur de connexion connect: Connection refused.

C'est ce que je fais:

  1. Le réseau IP mentionnée ici est IP STATIQUE que j'ai configuré.

  2. Le numéro de port est fixé à 50000 sur le côté Serveur et du côté client me connecter à cette adresse IP sur le port 50000.

  3. - Je construire et exécuter le côté serveur de l'application, puis essayez de vous connecter en exécutant côté client de l'application.

Un doute sur le côté serveur, côté serveur de l'application returns avant que je commence le client de l'application côté, donc, dois-je le garder en cours d'exécution (while(1);) afin que je puisse vous connecter à partir du côté client?

Du problème, suis-je oublier quelque chose ici? À l'aide!

Je suis coller le très légèrement modifié (IP et les numéros de port sont différents) Beej du code C pour côté Serveur et côté Client ici:

Serveur.c

/*
** server.c
*/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <netinet/in.h>
int main(int argc, char *argv[])
{
//code for a server waiting for connections
//namely a stream socket on port 3490, on this host's IP
//either IPv4 or IPv6.
int sockfd;
struct addrinfo hints, *servinfo, *p;
int rv;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; //use AF_INET6 to force IPv6
hints.ai_socktype = SOCK_STREAM;
hints.ai_flags = AI_PASSIVE; //use my IP address
if ((rv = getaddrinfo(NULL, "50000", &hints, &servinfo)) != 0)
{
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
exit(1);
}
//loop through all the results and bind to the first we can
for(p = servinfo; p != NULL; p = p->ai_next) 
{
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) 
{
perror("socket");
continue;
}
if (bind(sockfd, p->ai_addr, p->ai_addrlen) == -1)
{
close(sockfd);
perror("bind");
continue;
}
break; //if we get here, we must have connected successfully
}
if (p == NULL) 
{
//looped off the end of the list with no successful bind
fprintf(stderr, "failed to bind socket\n");
exit(2);
}
freeaddrinfo(servinfo); //all done with this structure
}

Client.c

/*
** client.c
*/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>
#include <arpa/inet.h>
#include <netinet/in.h>
int main(int argc, char *argv[])
{
//code for a client connecting to a server
//namely a stream socket to www.example.com on port 80 (http)
//either IPv4 or IPv6
int sockfd;
struct addrinfo hints, *servinfo, *p;
int rv;
memset(&hints, 0, sizeof hints);
hints.ai_family = AF_UNSPEC; //use AF_INET6 to force IPv6
hints.ai_socktype = SOCK_STREAM;
if ((rv = getaddrinfo("192.168.2.4", "50000", &hints, &servinfo)) != 0) 
{
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(rv));
exit(1);
}
//loop through all the results and connect to the first we can
for(p = servinfo; p != NULL; p = p->ai_next)
{
if ((sockfd = socket(p->ai_family, p->ai_socktype,
p->ai_protocol)) == -1) 
{
perror("socket");
continue;
}
if (connect(sockfd, p->ai_addr, p->ai_addrlen) == -1) 
{
close(sockfd);
perror("connect");
continue;
}
break; //if we get here, we must have connected successfully
}
if (p == NULL)
{
//looped off the end of the list with no connection
fprintf(stderr, "failed to connect\n");
exit(2);
}
freeaddrinfo(servinfo); //all done with this structure
}

OriginalL'auteur HaggarTheHorrible | 2012-07-16