免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1497 | 回复: 0
打印 上一主题 下一主题

select服务器程序 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-09 12:24 |只看该作者 |倒序浏览
//服务器端

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXLINE 1000
typedef struct client{
int fd;
char *name;
struct sockaddr_in addr;
char *data;
}CLIENT;
void str_echo(CLIENT *client,char *buf,int len);
void savadata(char *buf,int len,char *data);
int main(int argc,char **argv)
{
int listenfd,connfd;
struct sockaddr_in servaddr;
char buf[MAXLINE];
CLIENT client[FD_SETSIZE];
int clilen=sizeof(struct sockaddr_in),maxfd,maxi,nready,sockfd,i,n;
fd_set rset,allset;
listenfd=socket(AF_INET,SOCK_STREAM,0);
int flag=fcntl(sockfd,F_GETFL,0);
fcntl(sockfd,F_SETFL,flag|O_NONBLOCK);
int opt=SO_REUSEADDR;
setsockopt(listenfd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(13);
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr))==-1)
    {
     perror("bind error!!!");
     exit(1);
     }
if(listen(listenfd,5)==-1)
     {
     perror("listen() error");
     exit(1);
     }
maxfd=listenfd;
maxi=-1;
for(int j=0;j
   for( i=0;i
     client.name[0]=0;
     client.data[0]=0;
     printf("you got a connection from %s:%d======================%d\n",inet_ntoa(client.addr.sin_addr),ntohs(client.addr.sin_port),i);
     break;
      }
   }
         
   if(i==FD_SETSIZE)
   {
    printf("too many client\n !!!");
   }
   FD_SET(connfd,&allset);
   if(connfd>maxfd) maxfd=connfd;
   if(i>maxi) maxi=i;
   if(--nready
void str_echo(CLIENT *client,char *buf,int len)
{
char sendbuf[MAXLINE];
buf[len-1]=0;
if(strlen(client->name)==0)
{
  memcpy(client->name,buf,len);
  printf("client's name is %s\n",client->name);
  return;
}
printf("received client (%s) message :%s \n",client->name,buf);
savadata(buf,len,client->data);
printf("%s\n",client->data);
send(client->fd,buf,strlen(buf),0);
}
void savadata(char *buf,int len,char *data)
{
int start=strlen(data);
for(int i=0;i

//客户端

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAXLINE 1000
#define SIZE 1030

char * getMessage(char * sendline,int len,FILE *fp);
void process(FILE *fd,int sockfd);
int main(int argc,char **argv)
{
int sockfd,n;
char recvline[MAXLINE+1];
struct sockaddr_in servaddr;
if(argc!=2)
{
  printf("usage:a.out");
     exit(1);
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))
exit(0);
}
void process(FILE *fp,int sockfd)
{
char sendline[MAXLINE],recvline[MAXLINE];
int num;
printf("connected to server.\n");
printf("input name : ");
if(fgets(sendline,MAXLINE,fp)==NULL)
    {
         printf("\n exit \n");
         return;
    }
send(sockfd,sendline,strlen(sendline),0);
while(getMessage(sendline,MAXLINE,fp)!=NULL)
    {
       send(sockfd,sendline,strlen(sendline),0);
       if((num=recv(sockfd,recvline,MAXLINE,0))==0)
         {
          printf("server terminated .\n");
          return;
         }
        recvline[num]=0;
        printf("server message:%s\n",recvline);
    }
      printf("\n exit\n");
}
char * getMessage(char * sendline,int len,FILE *fp)
{
printf("input string to a server ");
return(fgets(sendline,MAXLINE,fp));
}


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/106726/showart_2115187.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP