套接字 - 客户端发送不起作用

时间:2013-09-04 16:04:32

标签: java c++ sockets

在下面的代码中,使用套接字建立C ++客户端和Java Server之间的连接。这是由Java Server通知的。但是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);

1 个答案:

答案 0 :(得分:0)

该行

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

应该是

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

&Char为您提供指向已分配内存的局部变量的地址。您希望将temp复制到已分配的内存中。

根据您对问题的描述,我猜测sizeof(temp) > sizeof(char*)所以您当前正在写入其他变量使用的堆栈区域,包括被损坏的套接字句柄s_id。 / p>

请注意,您目前也泄漏Char因此应在致电delete[] Char后添加send

或者,如果您将Char的地址传递给temp

,则可以完全避免分配send
IntVal temp(values); 
int tempp=send(s_id,&temp,sizeof(temp),0);