Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1083449
  • 博文数量: 646
  • 博客积分: 288
  • 博客等级: 二等列兵
  • 技术积分: 5375
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-08 14:33
个人简介

为了技术,我不会停下学习的脚步,我相信我还能走二十年。

文章分类

全部博文(646)

文章存档

2014年(8)

2013年(134)

2012年(504)

分类:

2012-06-28 09:18:56

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

#define MAXSOCKFD 10
#define GSMD_UNIX_SOCKET "\0gsmd"
#define GSMD_UNIX_SOCKET_TYPE SOCK_STREAM
 
int main(int argc,char *argv[])
{
 int sockfd,newsockfd,is_connected[MAXSOCKFD],fd;
 struct sockaddr_un addr;
 int addr_len = sizeof(struct sockaddr_in);
 fd_set readfds;
 char buffer[256];
 char msg[ ] ="Welcome to server!";
 
 if ((sockfd = socket(PF_UNIX, GSMD_UNIX_SOCKET_TYPE, 0))<0){//isockfd = socket(AF_INET,SOCK_STREAM,0)
  perror("socket");
  exit(1);
 }
 
 bzero(&addr,sizeof(addr));
/*
addr.sin_family =AF_INET;
addr.sin_port = htons(PORT);
addr.sin_addr.s_addr = htonl(INADDR_ANY);
*/
 addr.sun_family = AF_UNIX;
 memcpy(addr.sun_path, GSMD_UNIX_SOCKET, sizeof(GSMD_UNIX_SOCKET));
 
 if(bind(sockfd,(struct sockaddr *)&addr,sizeof(addr))<0){// bind(sockfd,(struct sockaddr *)&addr,sizeof(addr)
  perror("connect");
  exit(1);
 }
 
 if(listen(sockfd,10)<0){
  perror("listen");
  exit(1);
 }
 for(fd=0;fd  is_connected[fd]=0;
 while(1)
 {
  FD_ZERO(&readfds);
  FD_SET(sockfd,&readfds);
  //加入到is_connected【】数组中,数组下标为文件描述符,对应的数组值为0或1表示是否为连接
  for(fd=0;fd   if(is_connected[fd])
     FD_SET(fd,&readfds);
  // 
  if(!select(MAXSOCKFD,&readfds,NULL,NULL,NULL))
   continue;
  
  for(fd=0;fd  {
   if(FD_ISSET(fd,&readfds))
   {
     if(sockfd == fd)
     {
       if((newsockfd = accept (sockfd,(struct sockaddr *)&addr,(socklen_t*)&addr_len))<0)
         perror("accept");
       
       write(newsockfd,msg,sizeof(msg));
       is_connected[newsockfd] =1;
       //printf("cnnect from %s\n",inet_ntoa(addr.sin_addr));
     }else{
       bzero(buffer,sizeof(buffer));
       if(read(fd,buffer,sizeof(buffer))<=0)
       {
         printf("connect closed.\n");
         is_connected[fd]=0;
         close(fd);
       }
       else
         printf("%s\n",buffer);
     }
   }
  }
 }

}
 
 
 
 
-----------
client.c
 
-----------
 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define GSMD_UNIX_SOCKET "\0gsmd"
#define GSMD_UNIX_SOCKET_TYPE SOCK_STREAM
 
int main(int argc,char *argv[])
{
  int rc;
  int fd;
  struct sockaddr_un sun;
  char data[12]="9999\n";
  
  /* use unix domain socket to gsm daemon */
  printf("starting...\n");
  fd = socket(PF_UNIX, GSMD_UNIX_SOCKET_TYPE, 0);
 
  if (fd < 0)
   return fd;
  printf("starting...\n");
  memset(&sun, 0, sizeof(sun));
  sun.sun_family = AF_UNIX;
  memcpy(sun.sun_path, GSMD_UNIX_SOCKET, sizeof(GSMD_UNIX_SOCKET));
  printf("starting...\n");
  rc = connect(fd, (struct sockaddr *)&sun, sizeof(sun));
  if (rc < 0) {
   printf("not connect...\n");
   close(fd);
   fd = -1;
   return rc;
  }
  for(;;){
   usleep(100000);
   send(fd, data, strlen(data), 0);
  }
  printf("end\n");
  return 0;
}
 
阅读(508) | 评论(0) | 转发(0) |
0

上一篇:用socket实现本地通信

下一篇:poll函数

给主人留下些什么吧!~~