TCP Client-Server

鲜于德业
2023-12-01

/*****  Server.c *****/

#include <stdio.h>
#include <errno.h>
#include <signal.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <netdb.h>
 
int main (int argc, char *argv[])
{
  int sockfd,new_fd;
  struct sockaddr_in server_addr;
  struct sockaddr_in client_addr;
  int sin_size,portnumber;
  char hello[256]; //""Hello! Are You Fine? "";
  strcpy (hello, argv[3]);
  if(argc!=4)
    {
      fprintf(stderr,"Usage:%s portnumbera ",argv[0]);
      exit(1);
    }
 
  if((portnumber=atoi(argv[2]))<0)
    {
      fprintf(stderr, "Usage:%s portnumbera ", argv[0]);
      exit(1);
    }
 
  if((sockfd=socket(AF_INET,SOCK_STREAM, IPPROTO_TCP))==-1)
    {
      fprintf(stderr, "Socket error:%s a" ,strerror(errno));
      exit(1);
    }
 
  memset(&server_addr, 0, sizeof(struct sockaddr_in));
  server_addr.sin_family=AF_INET;
  server_addr.sin_port=htons(portnumber);
  server_addr.sin_addr.s_addr=INADDR_ANY;
  //  if (inet_pton (AF_INET, argv[1], &server_addr.sin_addr) <= 0)
  //  {
  //    printf ("Wrong source IP address!/n");
  //    exit (0);
  //  } 
 
  if(bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr))==-1)
    {
      fprintf(stderr, "Bind error:%s a", strerror(errno));
      exit(1);
    }
 
  if(listen(sockfd,5)==-1)
    {
      fprintf(stderr, "Listen error:%s a", strerror(errno));
      exit(1);
    }
 
  while(1)
    {
      sin_size=sizeof(struct sockaddr);
      if((new_fd=accept(sockfd, (struct sockaddr*)&client_addr, &sin_size))==-1)
        {
          fprintf(stderr, "Accept error:%s a", strerror(errno));
          exit(1);
        }
 
      fprintf(stderr, "Server get connection from %s ",
              inet_ntoa(client_addr.sin_addr));
      if(write(new_fd,hello,strlen(hello))==-1)
        {
          fprintf(stderr, "Write Error:%s ", strerror(errno));
          exit(1);
        }
      close(new_fd);
    }
 
  close(sockfd);
  exit(0);
}

/***** Client.c *****/

/*********** Client.c ************/
#include <stdio.h>
#include <errno.h>
#include <signal.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <string.h>
#include <netinet/in.h>
#include <netdb.h>
 
 
int main(int argc, char *argv[])
{
  int sockfd;
  char buffer[1024];
  struct sockaddr_in server_addr;
  struct hostent *host;
  int portnumber,nbytes;
 
  if(argc!=3)
    {
      fprintf(stderr, "Usage:%s hostname portnumbera ", argv[0]);
      exit(1);
    }
 
  if((host=gethostbyname(argv[1]))==NULL)
    {
      fprintf(stderr, "Gethostname error ");
      exit(1);
    }
 
  if((portnumber=atoi(argv[2]))<0)
    {
      fprintf(stderr, "Usage:%s hostname portnumbera ", argv[0]);
      exit(1);
    }
 
 
  if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
    {
      fprintf(stderr, "Socket Error:%sa ", strerror(errno));
      exit(1);
    }
 
 
  memset(&server_addr, 0, sizeof(server_addr));
  server_addr.sin_family=AF_INET;
  server_addr.sin_port=htons(portnumber);
  server_addr.sin_addr=*((struct in_addr *)host->h_addr);
 
 
  if(connect(sockfd,(struct sockaddr *)(&server_addr),sizeof(struct sockaddr))==-1)
    {
      fprintf(stderr, "Connect Error:%sa ", strerror(errno));
      exit(1);
    }
 
 
  if((nbytes=read(sockfd,buffer,1024))==-1)
    {
      fprintf(stderr, "Read Error:%s ", strerror(errno));
      exit(1);
    }
  buffer[nbytes]='/n';
  printf( "I have received:%s ", buffer);
 
  close(sockfd);
  exit(0);
}

 类似资料: