Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Тестовые примеры / ch11 / socket / sock_datagram_cls

.C
Скачиваний:
18
Добавлен:
01.05.2014
Размер:
1.52 Кб
Скачать
#include "sock.h"

const char* MSG1 = "Hello MSG1";
const char* MSG3 = "Hello MSG3";

main( int argc, char* argv[]) 
{
   char buf[80], socknm[80];
   if (argc < 2) {
      cerr << "usage: " << argv[0] << " <sockname|port> [<remote-host>]\n";
      return 1;
   }
   int  nlen, port = -1, rc;

   /* check if port number or socket name is specified */
   (void)sscanf(argv[1],"%d",&port);

   /* create a datagram socket */
   sock sp( port==-1 ? AF_UNIX : AF_INET, SOCK_DGRAM );
   if (!sp.good()) return 1;

   if (port==-1) {                            // UNIX domain socket
      sprintf(buf,"%s%d", argv[1], getpid()); // construct client socket name
      if (sp.bind(buf,port) < 0) return 2;      // assign name to socket
   } else 
      if (sp.bind(0,0) < 0) return 2;      // assign name to socket

   /* write MSG to server */
   if ((rc=sp.writeto( MSG1, strlen(MSG1)+1, 0, port==-1? argv[1] : argv[2], 
                    port, -1)) < 0) return 6;

   /* read MSG2 from server */
   if ((rc=sp.readfrom( buf, sizeof buf, 0, socknm, &port, -1)) < 0) return 7;
   cerr << "client: recvfrom '" << socknm << "' msg: " << buf << endl;

   /* establish a default server address */
   if (sp.connect(socknm,port) < 0) return 8;

   /* write MSG3 to server */
   if (sp.write(MSG3, strlen(MSG3)+1) < 0) return 9;

   /* read MSG4 from server */
   if ((rc=read(sp.fd(),buf,sizeof buf))==-1) return 10;
   cerr << "client: read msg: " << buf << endl;

   sp.shutdown();
}
Соседние файлы в папке socket