UDP Broadcast sunucu - istemci


Sunucu:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define MY_PORT 3333

int main(int argc, char *argv[])
{

    int sockfd, new_fd;
    struct sockaddr_in my_addr;    // hedef adres
    struct sockaddr_in their_addr; // baglanti yapan adres

    int sin_size, rt;

    // gelen verinin tutuldugu buffer
    char buf[32];

    // islem yapmak icin gerekli dosya gosterici
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    sin_size = sizeof(struct sockaddr_in);

    // adres ile ilgili ayarlar
    my_addr.sin_family      = AF_INET;
    my_addr.sin_port        = htons(MY_PORT); // kullanilacak port
    my_addr.sin_addr.s_addr = INADDR_ANY;     // mevcut ip adresi
    memset(&(my_addr.sin_zero), 0, 8); // geri kalani 0la

    // socket ile dosyayi iliskilendir
    bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr));

    while ( 1 ) {
        rt = recvfrom (sockfd, buf, 12, 0, (struct sockaddr *)&their_addr, &sin_size);
        if (rt > 0) {
            printf ("recv: %s\n", buf);
        } else if (rt < 0) {
            printf("Baglanti koptu\n");
            break;
        }
    }

    close(sockfd);
    return 0;
}

İstemci:

#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

#define DEST_IP   "255.255.255.255"
#define DEST_PORT 3333

int main(int argc, char *argv[])
{

    int sockfd, new_fd;
    struct sockaddr_in dest_addr; // hedef adres

    int sin_size, rt;
    sin_size = sizeof(struct sockaddr_in);

    // islem yapmak icin gerekli dosya gosterici
    sockfd = socket(AF_INET, SOCK_DGRAM, 0);

    // adres ile ilgili ayarlar
    dest_addr.sin_family      = AF_INET;
    dest_addr.sin_port        = htons(DEST_PORT);
    dest_addr.sin_addr.s_addr = inet_addr(DEST_IP);
    memset(&(dest_addr.sin_zero), 0, 8); // geri kalani 0 la

    // Broadcast icin gerekli yetkiyi al
    int flag = 1;
    if (setsockopt (sockfd, SOL_SOCKET, SO_BROADCAST, &flag, sizeof(flag)) < 0)
        perror("setsockopt");

    // mesaji gonder
    rt = sendto (sockfd, "slm asl plz", 12, 0, (const struct sockaddr *)&dest_addr, sin_size);
    if ( rt < 0 )
        perror("Hata: ");

    // socketi kapat
    close(sockfd);

    return 0;
}

See also

comments powered by Disqus