更改

时间:2015-06-15 12:34:40

标签: c++ visual-studio sdl sdl-net

我的代码很简单:

#define NUM_UA_SOCK     100

typedef struct _UA_REQUEST
{
    string full_url;
    uint32_t        url_adler32 ;
    TCPsocket   sock_ua ;
    uint32_t    status_flag ;               // ref Enum STATUS
} UA_REQUEST ;

UA_REQUEST  GLB_ARRAY__UA_REQ[ NUM_UA_SOCK ] ;

void handle_ua_sock_ready( uint32_t ii )
{
    string _req_mstr;

    byte*request    = (byte*) _req_mstr.c_str() ;
    byte*pcrlf  = NULL ;

    UA_REQUEST*ar = GLB_ARRAY__UA_REQ ;

    // Get request from UA
    int32_t nrcv ;

    printf("index =  %lu\n", ii);
    TCPsocket sock = ar[ii].sock_ua;
    nrcv = SDLNet_TCP_Recv( sock , request , MAXLEN ) ;
    printf("After index =  %lu\n", ii);
}

handle_ua_sock_ready()func开头的ii变量的值为0。在调用nrcv = SDLNet_TCP_Recv(sock,request,MAXLEN)之后;它变得具有非常大的价值,例如1852397344。 它是单线程应用程序。我使用的是VS 2010,SDL,SDL_net库。 PS:当我在Linux下编译它时,它工作正常。

1 个答案:

答案 0 :(得分:0)

您正在将request传递给SDLNet_TCP_Recv函数并告诉该request指向大小为MAXLEN的缓冲区的函数。由于request来自于空std::string缓冲区中的常量,这显然是错误的。

你想要一个载体

std::vector<unsigned char> request;
request.resize(MAXLEN);

...

nrcv = SDLNet_TCP_Recv( sock , request.data() , request.size() ) ;