📄 select_socket.cc
字号:
*select_socket.c*/
#include <SYS types.h>
#include <SYS socket.h>
#include <SYS wait.h>
#include <STDIO.H>
#include <STDLIB.H>
#include <ERRNO.H>
#include <STRING.H>
#include <SYS un.h>
#include <SYS time.h>
#include <SYS ioctl.h>
#include <UNISTD.H>
#include <NETINET in.h>
#define SERVPORT 3338
#define NEWPORT 3333
#define BACKLOG 10
#define MAX_CONNECTED_NO 10
#define MAXDATASIZE 100
int main()
{
struct sockaddr_in server_sockaddr,client_sockaddr;
int sin_size,recvbytes;
fd_set readfd;
fd_set writefd;
int sockfd,client_fd,sockfd2, client_fd2;
char buf[MAXDATASIZE];
char buf2[MAXDATASIZE];
if((sockfd = socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket");
exit(1);
}
printf("socket success!,sockfd=%d\n",sockfd);
if((sockfd2 = socket(AF_INET,SOCK_STREAM,0))==-1){
perror("socket");
exit(1);
}
printf("socket success!,sockfd=%d\n",sockfd2);
//int n=1;
//setsockopt(sockfd, SOL_SOCKET,SO_REUSEADDR, &n, sizeof(n));
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(NEWPORT);
server_sockaddr.sin_addr.s_addr=INADDR_ANY;
bzero(&(server_sockaddr.sin_zero),8);
if(bind(sockfd2,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1){
perror("bind");
exit(1);
}
printf("bind success!\n");
server_sockaddr.sin_family=AF_INET;
server_sockaddr.sin_port=htons(SERVPORT);
server_sockaddr.sin_addr.s_addr=INADDR_ANY;
bzero(&(server_sockaddr.sin_zero),8);
if(bind(sockfd,(struct sockaddr *)&server_sockaddr,sizeof(struct sockaddr))==-1){
perror("bind");
exit(1);
}
printf("bind success!\n");
if(listen(sockfd,BACKLOG)==-1){
perror("listen");
exit(1);
}
if(listen(sockfd2,BACKLOG)==-1){
perror("listen");
exit(1);
}
printf("listening....\n");
/*将调用socket函数的描述符作为文件描述符*/
FD_ZERO(&readfd);
FD_SET(sockfd,&readfd);
FD_SET(sockfd2,&readfd);
while(1){
sin_size=sizeof(struct sockaddr_in);
/*调用select函数*/
if(select(MAX_CONNECTED_NO,&readfd,NULL,NULL,(struct timeval *)0)>0){
if(FD_ISSET(sockfd,&readfd)>0){
if((client_fd=accept(sockfd,(struct sockaddr *)&client_sockaddr,&sin_size))==-1){
perror("accept");
exit(1);
}
if(read(client_fd,buf,MAXDATASIZE)<0){
perror("read");
exit(1);
}
printf("received a connection :%s\n",buf);
close(client_fd);
}
if(FD_ISSET(sockfd2,&readfd)>0){
if((client_fd2=accept(sockfd2,(struct sockaddr *)&client_sockaddr,&sin_size))==-1){
perror("accept");
exit(1);
}
if(read(client_fd2,buf,MAXDATASIZE)<0){
perror("read");
exit(1);
}
printf("received a connection :%s\n",buf);
close(client_fd2);
}
}
}/*while*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -