Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
16
Добавлен:
01.05.2014
Размер:
1.89 Кб
Скачать
#include <sys/systeminfo.h>
#include "tli.h"

#define MSG2 "Hello MSG2 from clts2"
#define MSG3 "Hello MSG3 from clts2"

typedef enum { LOCAL_TIME, GMT_TIME, QUIT_CMD, ILLEGAL_CMD } CMDS;

/* get a host name */
int gethost( int argc, char* argv[], char host[], int len)
{
   if (argc!=4) {
      if (sysinfo(SI_HOSTNAME,host,len)< 0) {
          perror("sysinfo");
          return -1;
      }
   } 
   else strcpy(host,argv[3]);
   return 0;
}

int main( int argc, char* argv[]) 
{
   char  buf[80], host[80];
   int  port=-1, clts1_port=-1, rc, flags=0;

   if (argc < 2) {
      cerr << "usage: " << argv[0] << " <service|port_no> <clts1_service|no> [<host>]\n";
      return 1;
   }

   /* check if port no. of a socket name is specified */
   (void)sscanf(argv[1],"%d",&port);
   (void)sscanf(argv[2],"%d",&clts1_port);

   tli  *sp;
   if (port==-1)  {
      if (gethost(argc, argv, host, sizeof host) < 0) return 2;
      sp = new tli( host, argv[1], 1 );
   } else sp = new tli (port, 1);

   if (!sp || !sp->good()) {
      cerr << "clts2: create transport endpoint object fails\n";
      return 2;
   }

   /* Bind a name to the transport end-point */
   if (sp->Bind() < 0) {
      cerr << "clts2: bind fails\n";
      return 3;
   }

   if (port==-1)
      rc = sp->writeto(MSG2,strlen(MSG2)+1, 0, argv[2], host);
   else rc = sp->writeto(MSG2, strlen(MSG2)+1, 0, clts1_port);
   if (rc < 0)
   {
      cerr << "clts2: writeto fails\n";
      return 4;
   }

   struct t_unitdata *ud = 0;
   if (sp->readfrom(buf, sizeof buf, flags, ud) < 0)
   {
      cerr << "clts2: readfrom fails\n";
      return 5;
   }
   cerr << "clts2: read msg: '" << buf << "'\n";

   if (sp->writeto(MSG3, strlen(MSG3)+1, flags, ud) < 0)
   {
      cerr << "clts2: writeto fails\n";
      return 6;
   }
   return 0;
}
Соседние файлы в папке tli