Cai lâu tằng nghi tự vi quy dĩ bị hệ thống chiết điệp ẩn tàng thử lâu tra khán thử lâu
Tối cận tại học linux biên trình. Tưởng dụng sáo tiếp tự tại tiến trình gian truyện tín tức, biên dịch thành công liễu đãn trắc thí đoan trảo bất đáo serc.
Đại mã như hạ, tá giám biệt nhân đích cải đích, kiểm trắc bất đáo sự kiện:
//serc.c
#include
#include
#include
#include
#include
#include
#include
#include
#define SERVER_NAME "@Banana"
void addfd(int epollfd,int fd)
{
struct epoll_event event;
event.data.fd=fd;
event.events=EPOLLIN|EPOLLET;
epoll_ctl(epollfd,EPOLL_CTL_ADD,fd,&event);
fcntl(fd,F_SETFL,fcntl(fd,F_GETFL)|O_NONBLOCK);
}
int main()
{
int listen_fd,com_fd,ret,i,selectfd,serverlen;
static char recv_buf[1024];
int epollfd=epoll_create(5);
struct sockaddr_un srv_addr;
do
{
listen_fd=socket(AF_UNIX,SOCK_STREAM,0);
if(listen_fd<0){perror( "create socket failure" );break;}
srv_addr.sun_family=AF_UNIX;
strncpy(srv_addr.sun_path,SERVER_NAME,sizeof(srv_addr.sun_path)-1);
printf( "%s\n",srv_addr.sun_path);
srv_addr.sun_path[0]=0;
serverlen = strlen(SERVER_NAME)+offsetof(struct sockaddr_un, sun_path);
unlink(SERVER_NAME);
ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));
if(ret==-1){perror( "Bind failure" );break;}
ret=listen(listen_fd,1);
if(ret==-1){perror( "Listen failure" );break;}
struct epoll_event events[1024];
if(epollfd==-1){perror( "create epoll failure" );break;}
addfd(epollfd,listen_fd);
while(1)
{
int number=epoll_wait(epollfd,events,1024,-1);
if(number<0){perror( "epoll failure" );break;}
printf( "epoll read\n" );
for(i=0;i
{
selectfd=events[i].data.fd;
if(selectfd==listen_fd)
{
struct sockaddr_un clt_addr;
int len=serverlen;
int connfd=accept(listen_fd,(struct sockaddr*)&clt_addr,&len);
addfd(epollfd,connfd);
}
else if(events[i].events&EPOLLIN)
{
while(1)
{
memset(recv_buf,0,1024);
ret=read(com_fd,recv_buf,sizeof(recv_buf));
if(ret<0)
{
if((errno==EAGAIN)||(errno==EWOULDBLOCK))
break;
close(selectfd);
break;
}
else if(ret==0)
close(selectfd);
else
printf( "Message:%s\n",recv_buf);
}
}
else
printf( "Something Happened" );
}
}
}while(0);
close(com_fd);
close(listen_fd);
unlink(SERVER_NAME);
return 0;
}
//clic.c:
#include
#include
#include
#include
#include
#define UNIX_DOMAIN "@Banana"
int main(void)
{
int connect_fd;
int ret;
char snd_buf[1024];
int i,srvaddr;
static struct sockaddr_un srv_addr;
connect_fd=socket(AF_UNIX,SOCK_STREAM,0);
if(connect_fd<0)
{
perror( "cannot create communication socket" );
return 1;
}
srv_addr.sun_family=AF_UNIX;
strcpy(srv_addr.sun_path,UNIX_DOMAIN);
strncpy(srv_addr.sun_path,UNIX_DOMAIN,sizeof(srv_addr.sun_path)-1);
srv_addr.sun_path[0]=0;
srvaddr=strlen(SERVER_NAME)+offsetof(struct sockaddr_un, sun_path);
unlink(UNIX_DOMAIN);
ret=connect(connect_fd,(struct sockaddr*)&srv_addr,srvaddr);
if(ret==-1)
{
perror( "cannot connect to the server" );
close(connect_fd);
return 1;
}
memset(snd_buf,0,1024);
strcpy(snd_buf, "message from client" );
//send info server
for(i=0;i<4;i++)
write(connect_fd,snd_buf,sizeof(snd_buf));
close(connect_fd);
return 0;
}
Đãn thị đối vu như hạ đích trình tự, trắc thí liên tiếp thành công liễu, nhi thả khả dĩ hòa thượng diện đích serc tịnh tồn:
//ser.c
#include
#include
#include
#include
#define SERVER_NAME "@Banana
int main(void)
{
// socklen_t clt_addr_len;
int listen_fd,com_fd,ret,i,len;
static char recv_buf[1024];
struct sockaddr_un clt_addr;
len=sizeof(clt_addr);
struct sockaddr_un srv_addr;
listen_fd=socket(AF_UNIX,SOCK_STREAM,0);
if(listen_fd<0)
{
perror( "cannot create communication socket" );
return 1;
}
srv_addr.sun_family=AF_UNIX;
strncpy(srv_addr.sun_path,SERVER_NAME,sizeof(srv_addr.sun_path)-1);
printf( "%s\n",srv_addr.sun_path);
srv_addr.sun_path[0]=0;
unlink(SERVER_NAME);
ret=bind(listen_fd,(struct sockaddr*)&srv_addr,sizeof(srv_addr));
if(ret==-1)
{
perror( "cannot bind server socket" );
close(listen_fd);
unlink(SERVER_NAME);
return 1;
}
//listen sockfd
ret=listen(listen_fd,1);
if(ret==-1)
{
perror( "cannot listen the client connect request" );
close(listen_fd);
unlink(SERVER_NAME);
return 1;
}
//have connect request use accept
com_fd=accept(listen_fd,(struct sockaddr*)&clt_addr,&len);
if(com_fd<0)
{
perror( "cannot accept client connect request" );
close(listen_fd);
unlink(SERVER_NAME);
return 1;
}
//read and printf sent client info
printf( "/n=====info=====/n" );
for(i=0;i<4;i++)
{
memset(recv_buf,0,1024);
int num=read(com_fd,recv_buf,sizeof(recv_buf));
printf( "Message from client (%d)):%s/n",num,recv_buf);
}
close(com_fd);
close(listen_fd);
unlink(SERVER_NAME);
return 0;
}
Cầu đại thần đái đái ngã............