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.
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. –