I have a data acquisition module from which I would like to collect data from an Ethernet port. I get the steps there , for now I would just like to connect to the server from the client. I used the Beej manual to get the base C code. But I just keep getting this connect: Connection refused. error connect: Connection refused.
This is what I do:
This is the IP address of the STATIC IP .
The port number is set to 50,000 on the server side, and on the client side I connect to this IP address on port 50,000.
I create and run the application on the server side, and then try to connect to it by running the application on the client side.
One doubt about the server side, the server side application returns before I run the client side application, so I have to keep it working ( while(1); ) so that I can connect to it from the client side?
What happens, did I forget something? Help!
I insert very slightly changed (IP numbers and port numbers are different). Beej C code for server side and client side here:
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 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
#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 }