Ich habe ein Datenerfassungsmodul, von dem ich Daten vom Ethernet-Port sammeln möchte. Ich komme in Schritten, derzeit möchte ich nur connect
Server von einem Client. Ich habe Beejs Anleitung benutzt, um den grundlegenden C-Code zu bekommen. Aber ich halte ihn nur connect Fehler bekommen connect: Connection refused.
C, Sockel: Verbindung Fehler verweigert
Das ist, was ich tue:
Die Netzwerk-IP hier erwähnt ist STATIC IP die ich konfiguriert haben.
Die Portnummer 50000 auf Server-Seite und von der Clientseite gesetzt ich an diese IP auf dem Port 50000.
ich baue und führen Sie die Server-Seite Anwendung verbinden und dann versuchen, eine Verbindung herzustellen indem Sie eine clientseitige Anwendung ausführen.
Ein Zweifel über Server-Seite, Server-seitige Anwendung returns
, bevor ich die Client-Seite Anwendung zu starten, so soll ich halte es läuft (while(1);
), so dass ich es von der Client-Seite einer Verbindung herstellen kann?
Was ist los, vergesse ich hier etwas? Hilfe!
ich das sehr leicht modifiziert bin Einfügen (IP und Port-Nummern sind unterschiedlich) Beej des C-Code für Server-Seite und Client-Seite hier:
server.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
}
Vielen Dank für die Links, die sie gelesen haben. – HaggarTheHorrible
@HeatfanJohn Ich habe einen Code überprüft, der das gemacht hat, aber das gleiche Problem hat. [Server.c] (https://paste.ubuntu.com/25599389/) [client.c] (https: //paste.ubuntu. com/25599391 /) – alhelal
@BandaMuhammadAlHelal Ihr Server scheint Port 9999 zu überwachen, während Ihr Client versucht, eine Verbindung zum Port FTP_PORT (21) herzustellen. Ändern Sie Ihren Client, um Port 9999 zu verwenden, um eine Verbindung herzustellen. – HeatfanJohn