一步一步做一个linux文件传输软件(四)

第三章实现了客户端向服务器发送一个字符A,服务器接收该字符后便将其打印出来。

        这一章将实现,客户端可以多次向服务器发送一个字符串。就是你在客户端可以输入多次,你输入啥,客户端就给你发送到服务器去。然后服务器再给你打印出来。

        这一章的代码在三的代码上修改非常少,第三章是发送一个字符,我们发送一个数组。数组里面存储着你想发送的字符串。

        以下便是代码:

  1 /***************************************************************************
  2 * * *
  3 * * * Filename: client.c
  4 * * *
  5 * * * Description: Network Client , transfer character or string to server
  6 * * *
  7 * * * creater: tian 2015.9.9
  8 * * *
  9 * * * version: 1.0
 10 * * *
 11 * * * change:
 12 * * *
 13 * * ***************************************************************************/
 14 #include <stdio.h>
 15 #include <stdlib.h>
 16 #include <string.h>
 17 #include <unistd.h>
 18 #include <arpa/inet.h>
 19 #include <netinet/in.h>
 20 
 21 #define SERV_PORT 8000
 22 #define PACK_SIZE 100
 23 
 24 int main(int argc, char **argv)
 25 {
 26      int  Client_socket = 0;
 27      int  Socket_len = 0;
 28      int  result = 0;
 29      char pack[PACK_SIZE];
 30      struct sockaddr_in server_addr;
 31 
 32      Client_socket = socket(AF_INET, SOCK_STREAM, 0);//create a socket
 33      if(-1 ==  Client_socket)
 34      {
 35          perror("socket");
 36          exit(1);
 37      }
 38 
 39      memset(&server_addr, 0, sizeof(server_addr));
 40 
 41      server_addr.sin_family = AF_INET;
 42      server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
 43      server_addr.sin_port = htons(SERV_PORT);
 44 
 45      result = connect(Client_socket, (struct sockaddr*)&server_addr, sizeof(server_addr));//c    onnect the server
 46      if(-1 == result)
 47      {
 48          perror("connect");
 49          exit(1);
 50      }
 51 
 52      while(1)
 53      {
 54          printf("Please input:\n");
 55 
 56          memset(pack, 0 , PACK_SIZE);//init the array pack
 57          fgets(pack, PACK_SIZE, stdin);
 58 
 59          result = write(Client_socket, pack, PACK_SIZE);//send out the string
 60          if(-1 == result)
 61          {
 62            perror("write");
 63          }
 64      }
 65 
 66      close(Client_socket);//close the socket
 67 
 68      exit(0);
 69 }

 1 /***************************************************************************
  2 * * *
  3 * * * Filename: server.c
  4 * * *
  5 * * * Description: Network server, accept A from server
  6 * * *
  7 * * * creater: tian 2015.9.9
  8 * * *
  9 * * * version: 1.0
 10 * * *
 11 * * * change:
 12 * * *
 13 * * ************************************************************************/
 14 #include <stdio.h>
 15 #include <stdlib.h>
 16 #include <string.h>
 17 #include <sys/types.h>
 18 #include <sys/socket.h>
 19 #include <unistd.h>
 20 #include <arpa/inet.h>
 21 #include <netinet/in.h>
 22 
 23 #define SERV_PORT 8000
 24 #define PACK_SIZE 100
 25 
 26 int main(int argc, char **argv)
 27 {
 28      int  Listen_socket = 0,New_socket = 0;
 29      int  result = 0;
 30      int  len = 0;
 31      char pack[PACK_SIZE];
 32      struct sockaddr_in server_addr,Client_addr;
 33 
 34      Listen_socket = socket(AF_INET, SOCK_STREAM, 0);//create a socket
 35      if(-1 ==  Listen_socket)
 36      {
 37          perror("socket");
 38          exit(1);
 39      }
 40 
 41      memset(&server_addr, 0, sizeof(server_addr));
 42 
 43      server_addr.sin_family = AF_INET;
 44      server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
 45      server_addr.sin_port = htons(SERV_PORT);
 46 
 47      result = bind(Listen_socket, (struct sockaddr *)&server_addr, sizeof(server_addr));//Named the socket
 48      if(-1 == result)
 49      {
 50          perror("bind");
 51          exit(1);
 52      }
 53 
 54      listen(Listen_socket,20);//momitor the connect fro client
 55 
 56      len = sizeof(Client_addr);
 57      New_socket = accept(Listen_socket, (struct sockaddr *)&Client_addr, &len);//receive a connect and create a new socket
 58      if(-1 == New_socket)
 59      {
 60          perror("accept");
 61          exit(1);
 62      }
 63 
 64      while(1)
 65      {
 66          memset(pack, 0, PACK_SZIE);//init the array
 67 
 68          result = read(New_socket, pack, PACK_SIZE);
 69          if(-1 == result)
 70          {
 71                 perror("read");
 72                 exit(1);
 73          }
 74 
 75          printf("receive:\n");
 76 
 77          fputs(pack, stdout);//print the received string
 78      }
 79 
 80      close(New_socket);
 81      close(Listen_socket);//close the socket
 82 
 83      exit(0);
 84 }
 85 
结果:(记得首先开启服务器)


  从代码中就可以看出,我们在客户端增加了一个数组,用数组存储要发送的字符串。在服务器端也增加了一个数组,接收从客户端发送而来的字符串。

版权声明:本文为博主原创文章,未经博主允许不得转载。

posted @ 2015-09-20 17:17  普雅花郎  阅读(236)  评论(0编辑  收藏  举报