2016-09-15 3 views
-1

So versuche ich, eine Client-Server-Anwendung mit Python als Client und C++ als Server auszuführen.Python-Client - C++ Server-Verbindung verweigert Fehler

Die beiden sind auf separaten Maschinen - gerade laufe ich den Python-Client auf meinem MacBook Pro und der Server ist ein Linux-Desktop, den ich habe.

ich in der Lage bin in meinem Linux-Box ssh mit, wie folgend:

ssh [email protected] 

Und dann mein Passwort eingeben

Trotz ohne Probleme ssh zu können, kann ich nicht einen Port/Socket-Verbindung erhalten arbeiten.

Hier ist mein Python-Code:

import socket, time 

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 
client.connect(('[email protected]', 9999)) 
print client.send('Hello world!'), 'bytes sent.' 
time.sleep(0.2) 
print 'Received message:', client.recv(1024) 

Und hier sind meine C++ Server (das von dieser Seite ausgeliehen wurde: http://www.cs.utah.edu/~swalton/listings/sockets/programs/part2/chap6/simple-server.c)

#define MY_PORT  9999 
#define MAXBUF  1024 

int main(int Count, char *Strings[]) 
{ int sockfd; 
    struct sockaddr_in self; 
    char buffer[MAXBUF]; 

    /*---Create streaming socket---*/ 
    if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) 
    { 
     perror("Socket"); 
     exit(errno); 
    } 

    /*---Initialize address/port structure---*/ 
    bzero(&self, sizeof(self)); 
    self.sin_family = AF_INET; 
    self.sin_port = htons(MY_PORT); 
    self.sin_addr.s_addr = INADDR_ANY; 

    /*---Assign a port number to the socket---*/ 
    if (bind(sockfd, (struct sockaddr*)&self, sizeof(self)) != 0) 
    { 
     perror("socket--bind"); 
     exit(errno); 
    } 

    /*---Make it a "listening socket"---*/ 
    if (listen(sockfd, 20) != 0) 
    { 
     perror("socket--listen"); 
     exit(errno); 
    } 

    /*---Forever... ---*/ 
    while (1) 
    { 
     int clientfd; 
     struct sockaddr_in client_addr; 
     int addrlen=sizeof(client_addr); 

     /*---accept a connection (creating a data pipe)---*/ 
     clientfd = accept(sockfd, (struct sockaddr*)&client_addr, &addrlen); 
     printf("%s:%d connected\n", inet_ntoa(client_addr.sin_addr), ntohs(client_addr.sin_port)); 

     /*---Echo back anything sent---*/ 
     send(clientfd, buffer, recv(clientfd, buffer, MAXBUF, 0), 0); 

     /*---Close data connection---*/ 
     close(clientfd); 
    } 

    /*---Clean up (should never get here!)---*/ 
    close(sockfd); 
    return 0; 
} 

Ich habe versucht, eigentlich zwei verschiedene Dinge für Die Python/Client-Seite:

Wenn ich folgendes schreibe:

client.connect(('[email protected]', 9999)) 

ich diesen Fehler: socket.gaierror: [Errno 8] nodename noch servname zur Verfügung gestellt, oder nicht bekannt

Allerdings, wenn ich tun:

client.connect(('address.hopto.org', 9999)) 

ohne den Benutzernamen Teil .. .Ich diesen Fehler:

socket.error: [Errno 61] Connection refused 

ich denke, es ist, weil ich ein Passwort auf meiner Linux-Box, die „Sperrung“ die Verbindung ist, aber ich d Ich weiß nicht, wie man es hier einbezieht.

Ich bin ein Anfänger im Netzwerk-Code, so viel davon ist mir sehr unbekannt.

+0

Die Verbindungsadresse ist eine IP-Adresse (127.0.0.1) oder ein DNS-Name (adresse.hopto.org). Die @ -Notation ist für E-Mails. Sie können telnet address.hopto.org 9999 telnet, um zu sehen, ob der Server aktiv ist. Versuchen Sie es auf der lokalen Box des Servers sowie der Remote-Box. Sie können sich auch netstat -alnp | ansehen grep 9999 auf der Serverbox. Sie suchen nach einer LISTEN-Notation. –

Antwort

0

Verbindung abgelehnt bedeutet normalerweise, dass der Host erreichbar ist, aber der Port nicht geöffnet ist.
Möglicherweise ist Ihre Anfrage blockiert durch Firewall oder Ihr Server wird nicht korrekt ausgeführt.

Um das Firewall-Problem zu vermeiden. Ich schlage vor, Sie können Ihr Python-Skript auf derselben Box wie der Server ausführen und 127.0.0.1 verwenden, um es zuerst zu verbinden.