+ -
当前位置:首页 → 问答吧 → rev 返回为0,数据接收却正确

rev 返回为0,数据接收却正确

时间:2010-09-10

来源:互联网

本帖最后由 faye_cb 于 2010-09-10 16:42 编辑

各位,

      本人刚刚学习socket编程,使用tcp方式发送结构体,每次判断recv返回都为0,但是,可以正常接收结构体内容,不知道各位大侠知道原因吗?

作者: faye_cb   发布时间: 2010-09-10

代码贴上来

作者: 冠希照相机   发布时间: 2010-09-10

LZ见鬼了

作者: JohnBull   发布时间: 2010-09-10

注册时间2006-01-08


到现在只发一贴。。。

作者: zhangsuozhu   发布时间: 2010-09-10



QUOTE:
注册时间2006-01-08


到现在只发一贴。。。
zhangsuozhu 发表于 2010-09-10 15:58




    LZ威武,

作者: ecjtubaowp   发布时间: 2010-09-10

结婚了?

作者: 梅川内依酷   发布时间: 2010-09-10

不知道~

作者: efolzl   发布时间: 2010-09-10

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <fstream>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <arpa/inet.h>
#include "packer.h"

#define PORT 4000
#define BACKLOG 10


int main()
{
                int sock_listen_fd, sock_accept_fd;

    struct sockaddr_in my_addr;
   
    struct sockaddr_in their_addr;
   
    PackHead packHead,rph;
   
    Package packer, rp;
   
    char buf[4096], rbuf[4096];

    int sin_size;
   
    int len;

    if ((sock_listen_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
    {
        printf("socket Create Error";
        exit(1);
    }

    my_addr.sin_family = AF_INET;
   
    my_addr.sin_port = htons(PORT);

    my_addr.sin_addr.s_addr = INADDR_ANY;

    bzero(&(my_addr.sin_zero), ;

    if (bind(sock_listen_fd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr)) == -1)
    {
        printf("Socket Bind Error";
        exit(1);
    }
   

    if (listen(sock_listen_fd, BACKLOG) == -1)
    {
        printf("Socket Listen Error";
        exit(1);
    }
   
   
    while(1)
    {
            sin_size = sizeof(sockaddr_in);

            if ((sock_accept_fd = accept(sock_listen_fd, (struct sockaddr *)&their_addr, (socklen_t*)&sin_size)) == -1)
            {
                printf("socket accept error";
                continue;
            }

            printf("server : go Connection from %s:%d\n", inet_ntoa(their_addr.sin_addr), their_addr.sin_port);

            if (!fork())
            {
//                if (send(sock_accept_fd, "hello, world!\n", 14, 0) == -1)
//                {
//                    printf("send error";
//                    close(sock_accept_fd);
//                    exit(0);
//                }
                                                                       
                                                                       
                                                                        memset(buf, 0, 4096);
                                                                        bzero(rbuf, 4096);
                                                                       
                                                                        packHead.Version = 1;
                                                                        packHead.Command = 1;
                                                                        packHead.pLen        = sizeof(Package);
                                                                       
                                                                       
                                                                        memcpy(packer.data, "hello, world! by chenbo \n", sizeof("hello, world! by chenbo \n");
                                                                       
                                                                       
                                                                        memcpy(buf, &packHead, sizeof(PackHead));
                                                                       
                                                                        memcpy(buf + sizeof(PackHead), &packer, sizeof(Package));
                                                                       

                                                                        for(int i = 0; i < 100; i++)
                                                                        {
                                                                               
                                                                                if (len = send(sock_accept_fd, buf, sizeof(PackHead) + sizeof(Package), 0) == -1)
                                                                                {
                                                                                        printf("send error";
                                                                                        close(sock_accept_fd);   
                                                                                        exit(0);  
                                                                                }
                                                                               
                                                                                if (len = recv(sock_accept_fd, rbuf, sizeof(PackHead), 0) == -1)
                                                                                        {
                                                                                                perror("recv";
                                                                                                close(sock_accept_fd);
                                                                                                exit(0);
                                                                                        }
                                                                                       
                                                                                       
                                                                                        memcpy(&rph, rbuf, sizeof(PackHead));
                                                                                       
                                                                                if (len == sizeof(PackHead))
                                                                                        {
                                                                                                memcpy(&rph, rbuf, sizeof(PackHead));
                                                                                        }
                                                                               
                                                                                printf("Recv Lenght: %d\n", len);
                                                                                       
                                                                                printf("packHead.Version=%d\n", rph.Version);
                                                                    printf("packHead.Command=%d\n", rph.Command);
                                                                    printf("packHead.pLen=%d\n", rph.pLen);
                                                                               
                                                                                if (len = recv(sock_accept_fd, rbuf, sizeof(Package), 0) == -1)
                                                                                        {
                                                                                                memcpy(&rp, rbuf, sizeof(Package));
                                                                                        }               
                                                                               

                                                                                       
                                                                                printf("Received: %s", rp.data);
                                                                                                                                                                               
                                                                               
                                                                                printf("Lenght:%d\n",len);
//                                                                        if (send(sock_accept_fd, (char *)&packer, sizeof(Package), 0) == -1)
//                                                                        {                                                        
//                                                                            printf("send error";                                
//                                                                            close(sock_accept_fd);                              
//                                                                            exit(0);                                             
//                                                                        }
                                                                        }

                                                                                                                                
                                                                       
                               

                close(sock_accept_fd);
            }

            while(waitpid(-1, NULL, WNOHANG) > 0);
    }
               
                close(sock_listen_fd);
               
    return 0;
}

作者: faye_cb   发布时间: 2010-09-10

我也是感觉到奇怪。

作者: faye_cb   发布时间: 2010-09-10

相关阅读 更多