0

以下のコードでは、C++ クライアントと Java サーバー間の接続がソケットを使用して確立されます。これは、Java サーバーから通知されます。しかし、C++ クライアントの Send() は -1 を返します。問題をつかむことができないようです。

struct sockaddr_in serv_addr;
s_id = socket (PF_INET,SOCK_STREAM,0);
if(s_id<0)
{
    printf("S_id Error \n");
}
else
{
    serv_addr.sin_family=AF_INET;
    serv_addr.sin_port =htons (9090);
    serv_addr.sin_addr.s_addr = inet_addr ("127.0.0.1");
    int C_check = connect (s_id,(struct sockaddr *) &serv_addr, sizeof (struct sockaddr));
    if(C_check<0)
    {
        printf("b_check Error \n");
    }
    else
    {
        IntVal temp(values); 
        char *Char=new char[sizeof(temp)];
        memcpy (&Char, &temp, sizeof(temp));
        int tempp;
        tempp=send(s_id,Char,sizeof(temp),0);
        if(tempp==-1)
        {
            printf("Nae Gya\n");
        }
    }
}
close(s_id);
4

1 に答える 1

0

この線

memcpy (&Char, &temp, sizeof(temp));

する必要があります

memcpy (Char, &temp, sizeof(temp));

&Char割り当てられたメモリを指すローカル変数のアドレスを提供します。temp代わりに、割り当てられたメモリにコピーします。

問題の説明に基づいて、現在、破損しsizeof(temp) > sizeof(char*)たソケットハンドルを含む、他の変数によって使用されているスタックの領域に書き込みを行っていると思います。s_id

現在もリークしているため、 を呼び出した後にChar追加する必要があることに注意してください。delete[] Charsend

または、のアドレスをにChar渡すと、割り当てをまったく回避できますtempsend

IntVal temp(values); 
int tempp=send(s_id,&temp,sizeof(temp),0);
于 2013-09-04T16:06:48.673 に答える