Datagramların Okunmasıyla İlgili Örnek
Önceki Datagram Soket İşlemleri Sonraki
Datagramların Okunmasıyla İlgili Örnek
Bu da önceki sunucuyla ilişkili istemci yazılımıdır.
It sends a datagram to the server and then waits for a reply. Notice that the socket for the client (as well as for the server) in this example has to be given a name. This is so that the server can direct a message back to the client. Since the socket has no associated connection state, the only way the server can do this is by referencing the name of the client.
#include <stdio.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SERVER  "/tmp/serversocket"
#define CLIENT  "/tmp/mysocket"
#define MAXMSG  512
#define MESSAGE "Aloo!!! Adanaaa, Adana mi orasi?!?"

int
main (void)
{
  extern int make_named_socket (const char *name);
  int sock;
  char message[MAXMSG];
  struct sockaddr_un name;
  size_t size;
  int nbytes;

  /* Soketi oluşturalim. */
  sock = make_named_socket (CLIENT);

  /* Sunucu soket adresini ilklendirelim. */
  name.sun_family = AF_LOCAL;
  strcpy (name.sun_path, SERVER);
  size = strlen (name.sun_path) + sizeof (name.sun_family);

  /* Datagramı gönderelim. */
  nbytes = sendto (sock, MESSAGE, strlen (MESSAGE) + 1, 0,
                    (struct sockaddr *) & name, size);
  if (nbytes < 0)
    {
      perror ("sendto (client)");
      exit (EXIT_FAILURE);
    }

  /* Yanıt bekleyelim. */
  nbytes = recvfrom (sock, message, MAXMSG, 0, NULL, 0);
  if (nbytes < 0)
    {
      perror ("recfrom (client)");
      exit (EXIT_FAILURE);
    }

  /* Durumu bildirelim. */
  fprintf (stderr, "İstemci: gelen ileti: %s\n", message);

  /* Ortalığı temizleyelim. */
  remove (CLIENT);
  close (sock);
}
Datagram soket haberleşmesinin güvenilir olmadığını aklınızdan çıkarmayınız. Bu örnekte, istemci yazılım, ileti sunucuya ulaşmazsa veya sunucunun cevabı gelmezse sonsuza kadar bekler. Yazılımı sonlandırmak veya yeniden başlatmak çalıştıran kişiye kalmıştır. Daha özdevinimli bir çözüm ise select (Girdi ve Çıktının Beklenmesi) ile cevap için bir zaman aşımı belirtmek ve bu süre sonunda iletiyi tekrar göndermek veya soketi kapatarak çıkmaktır.
Önceki Üst Ana Başlık Sonraki
Datagram Soket Örneği Başlangıç inetd Artalan Süreci
Bir Linux Kitaplığı Sayfası