免费注册 查看新帖 |

Chinaunix

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

linux socket问题,希望能解决下. [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-11-07 15:10 |只看该作者 |倒序浏览
客户端:

#include "webapp.h"
int main(int argc,char *argv[])
{
        int skfd;
        struct sockaddr_in skaddr = {0};
         char skptr[]= {"Hello Server\n"};
        if(argc != 3)//app ip port
                return -1;
        skaddr.sin_family = AF_INET;
        inet_aton(argv[1],&skaddr.sin_addr);
        skaddr.sin_port = (unsigned short)atoi(argv[2]);
        skfd = socket(AF_INET, SOCK_STREAM, 0);
        if( skfd == -1 )
        {
                perror("socket error!!!");
                return -1;
        }
        if( connect( skfd, (struct sockaddr *)&skaddr, sizeof(struct sockaddr) ) == -1 )
                return -1;
        while(1)
        {
                char sendptr[100] = {"ComeFromClient:"};
                char getptr[100] = {0};
//                if( fgets(sendptr + strlen("ComeFromClient:"), 80, stdin) != NULL);
//                {
//                        write( skfd, sendptr, sizeof(sendptr) );
//                }
                if( read(STDIN_FILENO, sendptr + strlen("ComeFromClient:"), sizeof(sendptr)) != 0 )
                {
                        write(skfd, sendptr, sizeof(sendptr));
                }
//                printf("\n");
                if( read(skfd, getptr, sizeof(getptr)) != 0 )
                {
                //        fputs(getptr,stdout);
//                        printf("%s",getptr);
                        write(STDOUT_FILENO, getptr, sizeof(getptr));
                }

                usleep(1);
        }
       
        close(skfd);
        return 0;
}

服务器端:
#include "webapp.h"
int main(int argc, char *argv[])
{
        int skfd;
        struct sockaddr_in skaddr;
        skfd = socket( AF_INET, SOCK_STREAM, 0 );
        if( skfd == -1 )
        {
                perror("socket error");
                return -1;
        }
        skaddr.sin_family = AF_INET;
        skaddr.sin_addr.s_addr = htonl(INADDR_ANY);
        skaddr.sin_port = (unsigned short)atoi(argv[1]);
        if( bind(skfd, (struct sockaddr *)&skaddr, sizeof(struct sockaddr)) == -1 )
        {
                perror("bind error");
                return -1;
        }
        if( listen(skfd, 1024 ) == -1 )
        {
                perror("listen error");
                return -1;
        }

        while(1)
        {
                char sendptr[100] = {"ComeFromServer:"};
                char getptr[100] = {0};
                int addrlen = sizeof(struct sockaddr);
                int        connfd = accept(skfd, (struct sockaddr *)&skaddr, &addrlen );
       
                while(1)
                {
                       
                        if(read( connfd, getptr, 100) != 0)
                        {
                                write(STDOUT_FILENO, getptr, sizeof(getptr));
                //                printf("%s",getptr);
                        }
                //        printf("\n");
//                        if( fgets(sendptr + strlen("ComeFromServer:"), 80, stdin) != NULL )
//                        {

//                                write(connfd, sendptr, sizeof(sendptr));
//                        }
                        if( read(STDIN_FILENO, sendptr + strlen("ComeFromServer:"),sizeof(sendptr)) != 0)
                        {
                                write(connfd, sendptr, sizeof(sendptr));
                        }

                        usleep(1);
                }
               
                close( connfd );
        }

        return 0;
}
问题时为什么客户端连续发送多次,在服务器端只显示第一次发送的内容;反过来也一样.不知是不是缓冲区的问题,怎么解决.如果只有客户端向服务器发数据时可行的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP