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[] Char在调用后添加send

或者,Char如果您将地址传递tempsend

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