Socketprogrammierung unter Linux

dadevelopa

Mitglied
Hallo zusammen, ich versuche unter Linux ein einfaches Socketprogramm zu erstellen, welches über UDP eine Nachricht an einen anderen Computer verschickt. Folgendes ist mein Code:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h> 
#include <string.h>

void error(char *msg)
{
    perror(msg);
    exit(0);
}

int main(int argc, char *argv[])
{
    int sockfd, portno, n;
    struct sockaddr_in serv_addr;
    struct hostent *server;

    char buffer[256];
    char *address = "100.50.40.30";
    char *port = "49000";

    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    if (sockfd < 0) 
        error("ERROR opening socket");
    server = gethostbyname(address);
    if (server == NULL) {
        fprintf(stderr,"ERROR, no such host\n");
        exit(0);
    }
    memcpy(&serv_addr.sin_addr, server->h_addr_list[0], server->h_length);
    
    serv_addr.sin_family = AF_INET;
    serv_addr.sin_port = htons(atoi(port));
    if (connect(sockfd,(struct sockaddr *)&serv_addr,sizeof(serv_addr)) < 0) 
        error("ERROR connecting");
    printf("Please enter the message: ");
    bzero(buffer,256);
    fgets(buffer,255,stdin);
    n = write(sockfd,buffer,strlen(buffer));
    if (n < 0) 
         error("ERROR writing to socket");
    bzero(buffer,256);
    n = read(sockfd,buffer,255);
    if (n < 0) 
         error("ERROR reading from socket");
    printf("%s\n",buffer);
    return 0;
}

Egal was ich jedoch versuche, ich kriege immer eine "Connection refused" beim versuch des connect(). Ein nmap auf den entsprechenden Port gibt diesen jedoch als geschlossen zurück. Ist dies unter Umständen das Problem? Seltsamerweise kann ich unter Windows mit Windowsspezifischem Code die Daten an den entsprechenden Computer senden, welcher diese auch empfängt.

Ich danke für jegliche Hilfe.
 
Hi.

Zuerst einmal, gethostbyname ist veraltet - genauso wie bzero. Du solltest getaddrinfo bzw. memset verwenden.

Dann verwendest du den falschen Sockettyp. TCP ist Verbindungsorientiert, UDP nicht. Du mußt SOCK_DGRAM verwenden.

Gruß
 
Zurück