Fehler auf server - /client-c-Programm: "Verbinden: socket operation on non-socket"
Arbeite ich an einer socket-Programm und alles scheint in Ordnung, beim kompilieren. Zuerst habe ich kompilieren und führen Sie den server, und ich Sie dann kompilieren und ausführen des Clients. Der server läuft Prima, aber wenn der client startet, erhalte ich eine Fehlermeldung in der Connect()
Funktion. Obwohl die Buchse scheint in Ordnung zu sein, der client keine Verbindung und der server sieht nicht die Verbindung versuchen.
Ist die Fehlermeldung:
Verbinden: Socket operation on non-socket
Hier ist der server-seitige code:
if ((ListeningSocket = socket(AF_INET, SOCK_STREAM,0 )) == -1){
printf("socket failed!\n");
exit(1);
}
else
printf("Server: socket() is OK!\n");
ServerAddr.sin_family = AF_INET;
ServerAddr.sin_port = htons(5000);
ServerAddr.sin_addr.s_addr = INADDR_ANY; //any one for any network can connect
memset(&(ServerAddr.sin_zero), '\0', 8); //
if (bind (ListeningSocket, (struct sockaddr *)&ServerAddr, sizeof(struct sockaddr))==-1)
{
printf("Server: bind() failed!\n");
exit (1);
}
else
printf("Server: bind() is OK!\n");
if (listen(ListeningSocket,5)== -1){
printf("Server: Error listening on socket\n");
exit (1);
}
else{
printf("Server: listen() is OK, I'm waiting for connections...\n");
printf("Server: accept() is ready...\n");}
sin_size = sizeof(struct sockaddr_in);
NewConnection = accept(ListeningSocket, (struct sockaddr *)&ClientAddr,(socklen_t *)&sin_size);
printf("Server: accept() is OK...\n");
printf("Server: Client connected, ready for receiving and sending data...\n");
.........
....
//}
Und hier ist der client-seitige code:
if(SendingSocket = socket(AF_INET, SOCK_STREAM, 0) == -1)
{
printf("Client: socket() failed!");
exit (1);
}
else
printf("Client: socket() is OK!\n");
ClientAddr.sin_family = AF_INET;
ClientAddr.sin_port = htons(5000);
ClientAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
memset(&(ClientAddr.sin_zero), '\0', 8);
if ( connect (SendingSocket, (struct sockaddr *)&ClientAddr,
sizeof(struct sockaddr)) == -1)
{
perror("Connect");
exit(1);
}
else
{
printf("Client: connect() is OK, got connected...\n");
printf("Client: Ready for sending and/or receiving data...\n");
}
....
InformationsquelleAutor berkay | 2009-09-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihnen fehlt eine Klammer. Der code
Lesen sollte
Die Art und Weise Sie es geschrieben, es heißt
was bedeutet: vergleichen Sie die socket () - Ergebnis -1, was 0 oder 1, und weisen, dass SendingSocket; dann testen, ob es wahr oder falsch ist. So SendingSocket ist wahrscheinlich 0, vorausgesetzt, die socket () - Aufruf erfolgreich war.
Nein, das ist nur eine von mehreren möglichen Ursachen.
InformationsquelleAutor Martin v. Löwis