Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7030
  • 博文数量: 5
  • 博客积分: 195
  • 博客等级: 入伍新兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2012-07-16 11:02
文章分类

全部博文(5)

文章存档

2012年(5)

我的朋友

分类: LINUX

2012-08-08 10:08:21

首先是服务器端的代码:(比较简单)

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <sys/socket.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #include <netinet/in.h>
  6. #include <stdlib.h>
  7. #include <time.h>

  8. #define SERVER_PORT 20000 // define the defualt connect port id
  9. #define LENGTH_OF_LISTEN_QUEUE 10 // length of listen queue in server
  10. #define BUFFER_SIZE 255
  11. #define WELCOME_MESSAGE "welcome to connect the server. "

  12. int main(int argc, char** argv)
  13. {
  14.        int servfd,clifd;
  15.        struct sockaddr_in servaddr,cliaddr;

  16.        if ((servfd = socket(AF_INET,SOCK_STREAM, 0 )) < 0 )
  17.          {
  18.               printf( " create socket error!\n " );
  19.               exit( 1 );
  20.        }

  21.        bzero( & servaddr, sizeof (servaddr));

  22.        servaddr.sin_family = AF_INET;
  23.        servaddr.sin_port = htons(SERVER_PORT);
  24.        servaddr.sin_addr.s_addr = htons(INADDR_ANY);

  25.        if (bind(servfd,( struct sockaddr * ) & servaddr, sizeof (servaddr)) < 0 )
  26.          {
  27.               printf( " bind to port %d failure!\n " ,SERVER_PORT);
  28.               exit( 1 );
  29.        }

  30.         if (listen(servfd,LENGTH_OF_LISTEN_QUEUE) < 0 )
  31.          {
  32.               printf( " call listen failure!\n " );
  33.               exit( 1 );
  34.        }

  35.         while ( 1 )
  36.          { // server loop will nerver exit unless any body kill the process

  37.               char buf[BUFFER_SIZE];
  38.               long timestamp;
  39.               socklen_t length = sizeof (cliaddr);
  40.               clifd = accept(servfd,( struct sockaddr * ) & cliaddr, & length);

  41.                if (clifd < 0 )
  42.                 {
  43.                      printf( " error comes when call accept!\n " );
  44.                      break ;
  45.               }

  46.               strcpy(buf,WELCOME_MESSAGE);

  47.                // inet_ntop(INET_ADDRSTRLEN,cliaddr.sin_addr,buf,BUFFER_SIZE);

  48.               printf( " from client,IP:%s,Port:%d\n " ,inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.sin_port));

  49.               timestamp = time(NULL);

  50.               strcat(buf, " timestamp in server: " );
  51.               strcat(buf,ctime( & timestamp));

  52.               send(clifd,buf,BUFFER_SIZE, 0 );

  53.               close(clifd);

  54.        } // exit

  55.        close(servfd);

  56.         return 0 ;
  57. }
然后是客服端的代码:

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <sys/socket.h>
  3. #include <unistd.h>
  4. #include <sys/types.h>
  5. #include <netinet/in.h>
  6. #include <stdlib.h>


  7. #define SERVER_PORT 20000 // define the defualt connect port id
  8. #define CLIENT_PORT ((20001+rand())%65536) // define the defualt client port as a random port
  9. #define BUFFER_SIZE 255
  10. #define REUQEST_MESSAGE "welcome to connect the server.\n"


  11. void usage(char* name)
  12. {
  13.        printf( " usage: %s IpAddr\n " ,name);
  14. }


  15. int main(int argc, char** argv)
  16. {
  17.        int servfd,clifd,length = 0;
  18.        struct sockaddr_in servaddr,cliaddr;
  19.        socklen_t socklen = sizeof (servaddr);
  20.        char buf[BUFFER_SIZE];

  21.         if (argc < 2 )
  22.          {
  23.               usage(argv[ 0 ]);
  24.               exit( 1 );
  25.        }

  26.        if ((clifd = socket(AF_INET,SOCK_STREAM, 0 )) < 0 )
  27.          {
  28.              printf( " create socket error!\n " );
  29.              exit( 1 );
  30.        }

  31.        srand(time(NULL)); // initialize random generator

  32.        bzero( & cliaddr, sizeof (cliaddr));
  33.        cliaddr.sin_family = AF_INET;
  34.        cliaddr.sin_port = htons(CLIENT_PORT);
  35.        cliaddr.sin_addr.s_addr = htons(INADDR_ANY);

  36.        bzero( & servaddr, sizeof (servaddr));
  37.        servaddr.sin_family = AF_INET;
  38.        inet_aton(argv[ 1 ], & servaddr.sin_addr);
  39.        servaddr.sin_port = htons(SERVER_PORT);
  40.       // servaddr.sin_addr.s_addr = htons(INADDR_ANY);

  41.        if (bind(clifd, (struct sockaddr* ) &cliaddr, sizeof (cliaddr)) < 0 )
  42.        {
  43.               printf( " bind to port %d failure!\n " ,CLIENT_PORT);
  44.               exit( 1 );
  45.        }

  46.         if (connect(clifd,( struct sockaddr * ) & servaddr, socklen) < 0 )
  47.        {
  48.               printf( " can't connect to %s!\n ", argv[ 1 ]);
  49.               exit( 1 );
  50.        }

  51.        length = recv(clifd, buf, BUFFER_SIZE, 0);
  52.         if (length < 0)
  53.         {
  54.               printf( " error comes when recieve data from server %s! ", argv[1] );
  55.               exit( 1 );
  56.        }

  57.        printf( " from server %s :\n\t%s", argv[1], buf);

  58.        close(clifd);
  59.        return 0;
  60. }
以上只是作为一个小例子的SOCKET通讯代码。

阅读(250) | 评论(0) | 转发(0) |
0

上一篇:对日java服务端SOCKET通讯

下一篇:没有了

给主人留下些什么吧!~~