利用accept函数来处理客户端请求的连接

来源:互联网 发布:网络监控工程宝 编辑:程序博客网 时间:2024/06/07 07:06
#include<sys/socket.h>
#include<stdio.h>
#include<stdlib.h>
#include<errno.h>
#include<memory.h>
#include<sys/mman.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<arpa/inet.h>
#define PORT 1234
#define MAX_QUE 5
int main()
{
    struct sockaddr_in local_sockaddr,client_sockaddr;
    int size;//客户端地址大小    
    int socketfd;//本地socket套接字描述符
    int clientfd;//客户端链接描述符
    if((socketfd=socket(AF_INET,SOCK_STREAM,0))<0)//建立socket连接
    {
        perror("socket");
        exit(1);
    }
    printf("Socket id = %d\n",socketfd);
    local_sockaddr.sin_family = AF_INET;
    local_sockaddr.sin_port    = htons(PORT);
    local_sockaddr.sin_addr.s_addr = htonl(INADDR_ANY);
    printf("server ip =%s\n",inet_ntoa(local_sockaddr.sin_addr));//输出服务器ip地址
    memset(local_sockaddr.sin_zero,0,8);
    int i;
    setsockopt(socketfd,SOL_SOCKET,SO_REUSEADDR,&i,sizeof(i));//允许重复使用本地的地址与套接字进行绑定
    if(bind(socketfd,(struct sockaddr *)&local_sockaddr,sizeof(struct sockaddr))<0)//绑定函数bind()
    {
        perror("bind");
        exit(1);
    }
    printf("Bind success!\n");
    if(listen(socketfd,MAX_QUE)<0)//利用listen()设置被动监听
    {
        perror("listen");
        exit(1);
    }
    printf("Listening>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n");
    if((clientfd=accept(socketfd,(struct sockaddr*)&client_sockaddr,&size))<0)//调用accept()函数,等待客户端的链接
    {
        perror("accept");
        exit(1);
    }
    printf("connect client success\n");
    printf("client ip = %s\n",inet_ntoa(client_sockaddr.sin_addr));//返回客户端ip地址
    printf("client port = %d\n",client_sockaddr.sin_port);//返回客户端端口号
    close(socketfd);//关闭socket连接
}
0 0