免费注册 查看新帖 |

Chinaunix

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

socket 采用select方式处理 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-11 22:20 |只看该作者 |倒序浏览
server:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define MAX_CLIENT 64
#define TRACE printf("\n\n%s @ %u\n\n",__FILE__,__LINE__);
const char buf[]="Welcome!";
int
main(int argc, char *argv[])
{
        struct sockaddr_in myAddr;                /*the server addr*/
        struct sockaddr_in clientAddr;        /*client addr*/
        int iLen;
        struct timeval tv;
        int sockfd;
        int acceptfd;
        int z;
        int loop=1;
        int reuse_addr=1;
        int wkfd;                                                /*the working fd;*/
        fd_set read_sock;
        fd_set wk_sock;                                        /*the current working socket set*/
        int maxfds;                                                /*the select max number of file describe*/
        char buffer[256];
        memset( &myAddr, 0, sizeof( struct sockaddr_in) );
        sockfd = socket(PF_INET, SOCK_STREAM, 0);
        if(sockfd  MAX_CLIENT)
                        {
                                printf("Max Client Number come out");
                                close(acceptfd);
                                continue;
                        }
                        if ( acceptfd +1 > maxfds )
                                maxfds = acceptfd+1;
                        FD_SET(acceptfd, &read_sock);//同一个client execute 两次
                }
                /*check the client */
                for (acceptfd=0;acceptfd =0 &&!FD_ISSET(acceptfd,&read_sock);
                acceptfd = maxfds-1)
                {
                        maxfds = acceptfd;
                }
        }
        /*the control will never come here*/
        printf("some thing error\n");
        return 0;
}
client:
#include
#include
#include
#include
#include
#include
#include
#include
#include
int
main(int argc, char **argv)
{
        int socketfd;
        //char buf[256];
        struct sockaddr_in *clientaddr=malloc(sizeof(struct sockaddr_in));
        char *addr=NULL;
        socketfd = socket(PF_INET, SOCK_STREAM, 0 );
        if(socketfd sin_family=AF_INET;
        if(argc == 2 )
        {
                inet_aton(argv[1], &(clientaddr->sin_addr) );
        } else
        {
                addr="127.0.0.1";
                clientaddr->sin_addr.s_addr=inet_addr("127.0.0.1");
                clientaddr->sin_port=htons(9090);
        }
        clientaddr->sin_port=htons(9090);
        if( connect( socketfd, ( struct sockaddr *)clientaddr,
                                sizeof( struct sockaddr) ) != -1  )
        {
                //int n;
                /*if ( ( n=read(socketfd, buf, sizeof( buf) ) ) > 0 )
                {
                        buf[n]=0;
                        printf(buf);
                        printf("\n");
                        bzero(buf,strlen(buf));
                }
                if ( fgets(buf,sizeof(buf),stdin) )
                {
                        buf[ strlen(buf)-1 ]=0;
                        write(socketfd,buf,strlen(buf) );
                }*/
                if(write(socketfd,"Hello",sizeof("Hello")) )
                {
                        while(1)
                        {}
                        write(stdout,"successful\r",12);
                }
        } else
        {
                perror("connect error");
        }
        while(1)
        {
        }
        printf("connect closed!\n");
        close(socketfd);
        free(clientaddr);
        exit(0);
}
               
               
               

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

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP