在下面的代码中,使用套接字建立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);
答案 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);