您的位置:首页 > 其它

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

2014-06-12 12:55 288 查看
#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连接

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: