Chinaunix首页 | 论坛 | 博客
  • 博客访问: 37791
  • 博文数量: 41
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 357
  • 用 户 组: 普通用户
  • 注册时间: 2014-04-20 16:26
文章分类

全部博文(41)

文章存档

2014年(41)

我的朋友

分类: LINUX

2014-04-23 21:21:44

client:

#include
#include
#include
#include
#include
#include
#include
#include
#include

int main()
{
    int opt = 1;
    socklen_t len = sizeof(len);
    int sock_fd;
    char send_buf[100] = "client send to server!";
    char recv_buf[100] = "recv data from server!";
    struct sockaddr_in my_addr;
    struct sockaddr_in dest_addr;
    if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
        perror("socket");
        exit(1);
    }

    if(setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &opt, len) == -1)
    {
        perror("setsockopt");
        exit(1);
    }

    my_addr.sin_family = AF_INET;
    my_addr.sin_port = htons(4000);
    my_addr.sin_addr.s_addr = inet_addr("192.168.1.110");
    bzero(&(my_addr.sin_zero), 8);

    dest_addr.sin_family = AF_INET;
    dest_addr.sin_port = htons(4000);
    dest_addr.sin_addr.s_addr = inet_addr("192.168.1.109");
    bzero(&(dest_addr.sin_zero), 8);

    if(bind(sock_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
    {
        perror("bind");
        exit(1);
    }

    while(1)
    {   //connect 是不阻塞的
        if(connect(sock_fd, (struct sockaddr *)&dest_addr, sizeof(struct sockaddr)) == -1)
        {
            perror("connect");
        }
        else
        {
            while(1)
            {
                //send 是不阻塞的
                if(send(sock_fd, send_buf, 100, 0) == -1)
                {
                    perror("send");
                }
                else
                {
                    break;
                }
            }
        }
        break;

    }

    shutdown(sock_fd, 2);
    return 0;
}

server:

#include
#include
#include
#include
#include
#include
#include
#include
#include

int main()
{
    int new_fd;
    int sock_fd;
    int da_size;
    int opt = 1;
    socklen_t len = sizeof(opt);
    char send_buf[100] = "client send to server!";
    char recv_buf[100] = "recv data from server!";
    struct sockaddr_in my_addr;
    struct sockaddr_in dest_addr;
    if((sock_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {  
        perror("socket");
        exit(1);
    }  
    //解决linux同一个端口号不能重复使用的问题
    if(setsockopt(sock_fd, SOL_SOCKET, SO_REUSEADDR, &opt, len) == -1)
    {  
        perror("setsockopt");
        exit(1);
    }

    my_addr.sin_family = AF_INET;//设置本地的地址信息
    my_addr.sin_port = htons(4000);
    my_addr.sin_addr.s_addr = INADDR_ANY;
    bzero(&(my_addr.sin_zero), 8);


    dest_addr.sin_family = AF_INET;//设置远程机的地址信息
    dest_addr.sin_port = htons(4000);
    dest_addr.sin_addr.s_addr = inet_addr("192.168.1.110");
    bzero(&(dest_addr.sin_zero), 8);

    if(bind(sock_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)//绑定本地端口
    {
        perror("bind");
        exit(1);
    }

    while(1)
    {
        if(listen(sock_fd, 5) == -1)//监听端口
        {
            perror("listen");
        }
        else
        {
            printf("listen over...\n");
            while(1)
            {   //如果没有任务,会阻塞在这
                if((new_fd = accept(sock_fd, (struct sockaddr *)&dest_addr, &da_size)) == -1)//从任务队列中接受任务
                {
                    perror("accept");
                }
                else
                {
                    printf("accept over....\n");
                    //while(1)
                    //{


                        if(recv(new_fd, recv_buf, 100, 0) == -1)//接收消息
                        {
                            perror("recv");
                        }
                        else
                        {
                            printf("recv over....\n");
                            printf("recv data:%s\n",  recv_buf);
                        }
                    //}
                }
            }
        }
        break;
    }

    shutdown(sock_fd, 2);
    return 0;
}


 




阅读(158) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~