C语言Linux下的Socket 编程(TCP)

来源:互联网 发布:linux 连接oracle 编辑:程序博客网 时间:2024/05/21 10:32

(1) Client.cpp


  #include <stdio.h>
  #include <stdlib.h>
  #include <unistd.h>
  #include <string.h>
  #include <sys/types.h>
  #include <sys/socket.h>
  #include <netinet/in.h>
  #include <netdb.h>
  #include <arpa/inet.h>
  
  void error(const char *msg)
  {
      perror(msg);
      exit(0);
  }
  
  int main(int argc, char *argv[])
  {
      int     sockfd, portno, n;
      struct  sockaddr_in serv_addr;
      char    buffer[256];
      char    *server_addr = argv[1];
  
      if (argc < 3) {
          fprintf(stderr,"usage %s port\n", argv[0]);
          exit(0);
      } 
  
      portno = atoi(argv[2]);
      sockfd = socket(AF_INET, SOCK_STREAM, 0);
        
      if (sockfd < 0)
          error("ERROR opening socket");
        
      bzero((char *) &serv_addr, sizeof(serv_addr));
      serv_addr.sin_family = AF_INET;
  //  bcopy((char *)server->h_addr, 
  //          (char *)&serv_addr.sin_addr.s_addr, server->h_length);
      serv_addr.sin_addr.s_addr = inet_addr(server_addr);
      serv_addr.sin_port = htons(portno);
  
      if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
          error("ERROR connecting");
        
      printf("Please enter the message: ");
      bzero(buffer,256);
      fgets(buffer,255,stdin);
      n = write(sockfd,buffer,strlen(buffer));
      if (n < 0)
          error("ERROR writing to socket");
      bzero(buffer,256);
      n = read(sockfd,buffer,255);
      if (n < 0)
          error("ERROR reading from socket");
                                            
      printf("%s\n",buffer);
      close(sockfd);
        
      return 0;
  }


(2) Server.cpp


  #include <stdio.h>
  #include <stdlib.h>
  #include <string.h>
  #include <unistd.h>
  #include <sys/types.h>
  #include <sys/socket.h>
  #include <netinet/in.h>
  
  void error(const char *msg)
  {
          perror(msg);
              exit(1);
  }
  
  int main(int argc, char *argv[])
  {
      int sockfd, newsockfd, portno;
      socklen_t clilen;
      char buffer[256];
      struct sockaddr_in serv_addr, cli_addr;
      int n;
      if (argc < 2) {
          fprintf(stderr,"ERROR, no port provided\n");
          exit(1);
      } 
            
      sockfd = socket(AF_INET, SOCK_STREAM, 0);
      if (sockfd < 0)
          error("ERROR opening socket");
            
      bzero((char *) &serv_addr, sizeof(serv_addr));
      portno = atoi(argv[1]);
        
      serv_addr.sin_family = AF_INET;
      serv_addr.sin_addr.s_addr = htonl(INADDR_ANY);
      serv_addr.sin_port = htons(portno);
                                           
      if (bind(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
          error("ERROR on binding");
            
      listen(sockfd,5);
      clilen = sizeof(cli_addr);
      newsockfd = accept(sockfd, (struct sockaddr *) &cli_addr, &clilen);
                        
      if (newsockfd < 0)
          error("ERROR on accept");
      bzero(buffer,256);
        
      n = read(newsockfd,buffer,255);
      if (n < 0)
          error("ERROR reading from socket");
            
      printf("Here is the message: %s\n",buffer);
      n = write(newsockfd,"I got your message",18);
        
      if (n < 0)
          error("ERROR writing to socket");

      printf("Here is the message: %s\n",buffer);
      n = write(newsockfd,"I got your message",18);
        
      if (n < 0)
          error("ERROR writing to socket");
                                             
      close(newsockfd);
      close(sockfd);
                      
      return 0;
  }