Chinaunix首页 | 论坛 | 博客
  • 博客访问: 7723707
  • 博文数量: 961
  • 博客积分: 15795
  • 博客等级: 上将
  • 技术积分: 16612
  • 用 户 组: 普通用户
  • 注册时间: 2010-08-07 14:23
文章分类

全部博文(961)

文章存档

2016年(1)

2015年(61)

2014年(41)

2013年(51)

2012年(235)

2011年(391)

2010年(181)

分类: LINUX

2011-06-21 21:19:23

/*

 * 数据流套接字实现 客户——服务器之间数据的传输

 * 服务器程序

 * Lzy 2011-6-21

 */

 

#include

#include

#include

#include

#include

#include

#include

 

#define SERVPORT  5555   //服务器监听端口

#define BACKLOG       10      //请求队列的长度数

 

int main(void)

{

    int ret;

    time_t tt;

    struct tm *ttm;

   

    int socketfd;         //定义监听Socket描述符

    int clientfd;         //定义数据传输Socket描述符

    struct sockaddr_in host_addr;   //本机IP地址和端口信息

    struct sockaddr_in client_addr; //客户端IP地址和端口信息

    int addrlen = sizeof(client_addr);

    char buf[256];            //发送数据缓冲区

 

    /*创建套接字*/

    socketfd = socket(AF_INET, SOCK_STREAM, 0);   //使用TCP/IP协议族 数据流

    if(socketfd == -1)

    {

        perror("socketfd");

        exit(0);

    }

   

    /*绑定套接字*/

    memset(&host_addr, 0, sizeof(host_addr));

    host_addr.sin_family = AF_INET;         //TCP/IP协议

    host_addr.sin_port = htons(SERVPORT);  //把主机字节顺序转换为网络字节顺序

    host_addr.sin_addr.s_addr = INADDR_ANY;   //填入本机IP地址

    ret = bind(socketfd, (struct sockaddr *)&host_addr, sizeof(host_addr));   /*绑定套接字*/

    if(ret == -1)

    {

        perror("blind");

        exit(0);

    }

 

    /**监听网络端口**/

    ret = listen(socketfd, BACKLOG);  

    if(ret == -1)

    {

        perror("listen");

        exit(0);

    }

   

    while(1)  

    {      

        clientfd = accept(socketfd, (struct sockaddr *)&client_addr, &addrlen);   /**接收链接请求**/

        if(clientfd == -1)

        {

            perror("connect");

            exit(0);

        }

       

        printf("Client IP:%s\n", inet_ntoa(client_addr.sin_addr.s_addr));  //打印连接上客服IP地址

        tt = time(NULL);

        ttm = localtime(&tt);

        strcpy(buf, asctime(ttm));

       

        send(clientfd, buf, strlen(buf), 0);               //发送数据

        close(clientfd);

    }

 

    return 0;

}

 

 

 

/*

 * 数据流套接字实现 客户——服务器之间数据的传输

 * 客户端程序

 * Lzy 2011-6-21

 */

 

#include

#include

#include

#include

#include

#include

 

#define SERVPORT  5555   //服务器监听端口

#define BACKLOG       10      //请求队列的长度数

 

int main(int argc, char *argv[])

{

    int ret;

    int socketfd;         //定义Socket描述符    

    struct sockaddr_in serv_addr;   //客户端IP地址和端口信息

    int addrlen = sizeof(serv_addr);

    char buf[256];            //发送数据缓冲区

 

    if(argc != 2)

    {

        printf("命令行参数太少\n");

        exit(0);

    }

   

    /*创建套接字*/

    socketfd = socket(AF_INET, SOCK_STREAM, 0);   //使用TCP/IP协议族 数据流

    if(socketfd == -1)

    {

        perror("socketfd");

        exit(0);

    }

   

    /*建立连接*/

    memset(&serv_addr, 0, sizeof(serv_addr));

    serv_addr.sin_family = AF_INET;                 //TCP/IP协议

    serv_addr.sin_port = htons(SERVPORT);          //把主机字节顺序转换为网络字节顺序

    inet_aton(argv[1], (struct sockaddr *)&serv_addr.sin_addr.s_addr); //填入本机IP地址

    ret = connect(socketfd, (struct sockaddr *)&serv_addr, addrlen);   /*建立连接*/

    if(ret == -1)

    {

        perror("connect");

        exit(0);

    }

   

    while(1)  

    {              

        recv(socketfd, buf, sizeof(buf), 0);               //接收数据

        printf("接收:%s", buf);

        sleep(3);

    }

 

    return 0;

}

 

 

  1. /*
  2.  * 网络字节顺序转换
  3.  * 主机和网络字节序值转换
  4.  * 对数据字节顺序进行转换
  5.  * Lzy 2011-6-21
  6.  */

  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include <netinet/in.h>

  10. int main(void)
  11. {
  12.     int x = 0x12345678;

  13.     printf("x = %x\n",x);
  14.     printf("转换之后:%x\n", htonl(x));

  15.     return 0;
  16. }


  17. /*
  18.  * 建立全双工“管道”
  19.  * Lzy 2011-6-21
  20.  */

  21. #include <stdio.h>
  22. #include <stdlib.h>
  23. #include <string.h>
  24. #include <netinet/in.h>

  25. int main(void)
  26. {
  27.     int fd[2];
  28.     pid_t pid;                
  29.     int ret;                
  30.     char buf[30];            

  31.     ret = socketpair(PF_LOCAL, SOCK_STREAM, 0, fd);    
  32.     if(ret == -1)
  33.     {
  34.         perror("socketpair");
  35.         exit(0);
  36.     }

  37.     pid = fork();
  38.     if(pid == 0)
  39.     {
  40.         close(fd[0]);
  41.         while(1)
  42.         {
  43.             printf("<子进程>发送:");
  44.             scanf("%s",buf);
  45.             write(fd[1], buf, strlen(buf));

  46.             bzero(buf, sizeof(buf));
  47.             read(fd[1], buf, sizeof(buf));
  48.             printf("<子进程>接收:%s\n",buf);
  49.         }
  50.     }
  51.     else if(pid > 0)
  52.     {
  53.         close(fd[1]);
  54.         while(1)
  55.         {
  56.             bzero(buf, sizeof(buf));
  57.             read(fd[0], buf, sizeof(buf));
  58.             printf("<父进程>接收:%s\n",buf);

  59.             printf("<父进程>发送:");
  60.             scanf("%s",buf);
  61.             write(fd[0], buf, strlen(buf));            
  62.         }    
  63.     }
  64.     return 0;
  65. }
阅读(3144) | 评论(0) | 转发(4) |
给主人留下些什么吧!~~