Solved

UNIX NETWORKING PROGRAMMING

Posted on 1998-11-13
4
224 Views
Last Modified: 2013-12-23
I want to write a program in C (under unix) in which a user specifies a remote host name (or ip address) and request a service such as the current time of the remote server. The program should convert the username to an ip address(if username is given), locate the remote host, request the service required by user and display the output(in a user friendly manner) on the user's terminal. Please help!!
0
Comment
Question by:boosta
  • 2
  • 2
4 Comments
 
LVL 4

Accepted Solution

by:
davidmwilliams earned 200 total points
ID: 1582608
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>

extern int errno;

int TCPdaytime (const char* host, const char *service);
int errexit (const char *format, ...);
int connectTCP (const char *host, const char *service)

#define LINELEN 128

int main (int argc, char *argv [])
{
  char *host = "localhost";
  char *service = "daytime";

  switch (argc)
  {
    case 1:
      host = "localhost";
      break;

    case 3:
      service = argv [2];

    case 2:
      host = argv [1];
      break

    default:
      fprintf (stderr, "usage: TCPdaytime [host [port]]\n");
      exit (1);
  }

  TCPdaytime (host, service);
  exit (0);
}

TCPdaytime (const char *host, const char *service)
{
  char buf [LINELEN + 1];
  int s, n;

  s = connectTCP (host, service);

  while ( (n = read (s, buf, LINELEN)) > 0)
  {
    buf [n] = '\0';
    (void) fputs (buf, stdout);
  }
}

int errexit (const char *format, ...)
{
  va_list args;

  va_start (args, format);
  vfprintf (stderr, format, args);
  va_end (args);
  exit (1);
}

int connectTCP (const char *host, const char *service)
{
  struct hostent *phe;
  struct servent *pse;
  struct protoent *ppe;
  struct sockaddr_in sin;
  int s, type;

  memset (&sin, 0, sizeof (sin));
  sin.sin_family = AF_INET;

  if (pse = getservbyname (service, "tcp"))
    sin.sin_port = pse->s_port;
  else if ( (sin.sin_port = htons ((u_short) atoi (service))) == 0)
    errexit ("Can't get \"%s\" service entry.\n", service);

  if (phe = gethostbyname (host))
    memcpy (&sin.sin_addr, phe->h_addr, phe->h_length);
  else if ((sin.sin_addr.s_addr = inet_addr (host)) == INADDR_NONE)
    errexit ("Can't get \"%s\" host entry.\n", host);

  if ((ppe = getprotobyname ("tcp")) == 0)
    errexit ("Can't get \"tcp\" protocol entry.\n");

  type = SOCK_STREAM;

  s = socket (PF_INET, type, ppe->p_proto);
  if (s < 0)
    errexit ("Can't create socket: %s\n", strerror (errno));

  if (connect (s, (struct sockaddr *) &sin, sizeof (sin)) < 0)
    errexit ("Can't connect to %s.%s: %s\n", host, service, strerror (errno));

  return s;
}
0
 

Author Comment

by:boosta
ID: 1582609
Thanx a lot. Its appropriate and accurate.
0
 

Author Comment

by:boosta
ID: 1582610
Thanx a lot. Its appropriate and accurate.
0
 
LVL 4

Expert Comment

by:davidmwilliams
ID: 1582611
Glad to be able to help !
0

Featured Post

Connect further...control easier

With the ATEN CE624, you can now enjoy a high-quality visual experience powered by HDBaseT technology and the convenience of a single Cat6 cable to transmit uncompressed video with zero latency and multi-streaming for dual-view applications where remote access is required.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Setting up a VPN 60 184
How to append an output to existing file with DOS and IPerf 2 37
assignment of laptops - risks 6 56
Price for Fiber 13 35
ADCs have gained traction within the last decade, largely due to increased demand for legacy load balancing appliances to handle more advanced application delivery requirements and improve application performance.
When it comes to security, there are always trade-offs between security and convenience/ease of administration. This article examines some of the main pros and cons of using key authentication vs password authentication for hosting an SFTP server.
Viewers will learn how to connect to a wireless network using the network security key. They will also learn how to access the IP address and DNS server for connections that must be done manually. After setting up a router, find the network security…
In this tutorial you'll learn about bandwidth monitoring with flows and packet sniffing with our network monitoring solution PRTG Network Monitor (https://www.paessler.com/prtg). If you're interested in additional methods for monitoring bandwidt…

820 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question