Ich versuche, eine Client-Server-Kommunikation mit UNIX-Sockets und mit dem STREAM-Protokoll.UNIX-Socket-Fehler: Socket-Operation auf Nicht-Socket
Mein Server läuft gut, aber mein Client funktioniert nicht. Immer wenn ich versuche, Daten zu senden oder zu empfangen, erhalte ich einen Fehler: "Socket-Operation auf Nicht-Socket". Ich sehe wirklich nicht wo es herkommt, weil mein Server sehr ähnlich ist und ich kein Problem habe. Mein Server befindet sich auf meinem lokalen Computer (127.0.0.1) und Port 5000. Er ist offen und hört zu (ich habe das mit dem Befehl netstat überprüft).
Der Code ist es:
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>
#define CHECK(ret, mes) if ((ret) == -1) {perror(mes); exit(-1);}
#define STRING_LENGTH 250
int createSocketINETClient(short mode, char *addr, short port)
{
int s;
struct sockaddr_in moi, server;
int moi_len, server_len;
moi.sin_family = AF_INET;
moi.sin_port = htons(port);
moi.sin_addr.s_addr = inet_addr(addr);
memset(moi.sin_zero, 0, 8);
s = socket(AF_INET, mode, 0);
CHECK(s, "socket");
moi_len = sizeof(moi);
CHECK(bind(s, (struct sockaddr*) &moi, moi_len), "bind");
return s;
}
void infoSocket (int s)
{
struct sockaddr_in sock_addr;
socklen_t len = sizeof(sock_addr);
getsockname(s, (struct sockaddr*) &sock_addr, &len);
printf("Onfo of socket %d\n", s);
printf("\t IP : %s\n", inet_ntoa(sock_addr.sin_addr));
printf("\t port : %d\n\n", ntohs(sock_addr.sin_port));
}
int main()
{
int bytes;
int sock = createSocketINETClient(SOCK_STREAM, "0.0.0.0", 0);
struct sockaddr_in serveurSock;
int client = 0, clientSockLen = 0;
char message[] = "I am a message that is supposed to WORK !!!!\n";
char fromServer[STRING_LENGTH] = "";
infoSocket(sock);
serveurSock.sin_family = AF_INET;
serveurSock.sin_port = htons(5000);
serveurSock.sin_addr.s_addr = inet_addr("127.0.0.1");
memset(serveurSock.sin_zero, 0, 8);
CHECK(connect(sock, (struct sockaddr*) &serveurSock, sizeof(serveurSock)), "connect");
usleep(1000000);
CHECK((bytes = send(client, message, sizeof(message), 0)), "send");
printf("Message sent to server : %d bytes, \"%s\"\n", bytes, message);
CHECK((bytes = recv(client, fromServer, sizeof(fromServer), 0)), "recv");
printf("Message received from server : %d bytes, \"%s\"\n", bytes, fromServer);
close(client);
printf("Client released !\n\n");
return 0;
}
Was habe ich falsch gemacht?
EDIT: Der Fehler von dieser Linie kommt:
CHECK((bytes = send(client, message, sizeof(message), 0)), "send");
Aus welcher Funktion? – o11c
Ich habe den Beitrag bearbeitet, um die Zeile des Fehlers einzuschließen, sorry dafür – ZamenWolk
Sie verwenden 'client', wo Sie' sock' verwenden sollten. – EJP