【发布时间】:2023-08-15 01:29:01
【问题描述】:
我正在编写一个在 c 中使用套接字编程的程序。
在这个程序中,客户端和服务器不断发送和接收数据。
当我使用这种代码通过套接字发送和接收整数时
//in the program sending data
int data;
len= send(s,(char *)&(data),sizeof(data),0);
//in the program receiving data
int num;
len = recv(s,&num, sizeof(num) , 0);
上面的代码工作正常,我可以发送和接收号码。
在一种情况下,我尝试发送表单结构
struct sample{
int num;
char chain[10*hops+10];
};
//in the program sending data
struct sample s1;
len= send(s,(char *)&(s1),sizeof(s1),0);
//in the program receiving data
struct sample s2;
len = recv(s,&s2, sizeof(s2) , 0);
在我尝试发送和接收结构的示例中,它不起作用。如何成功发送和接收结构体?
注意: 1) Hops 是一个预先定义的变量。两个程序中 hops 的值是相同的。 2)不工作我的意思是:当我收到结构并打印数字中的值时。它打印的不是相同的值,而是零!
【问题讨论】:
-
not working.. 请澄清。hops是什么? -
你能显示你的完整代码吗..?
-
这样直接发送结构体可能会出现多个问题:首先是填充问题,如果您使用不同的编译器编译发送方和接收方,它们可能会在结构中添加不同的填充。打印例如
sizeof(struct sample)在两个程序中。然后是字节顺序的问题,您之间发送的两个系统是否具有相同的endianness?最后,hops在发送方和接收方中是否相同? -
如果之前的问题对您来说都不是问题,那么它应该有效,并且您需要更详细地描述您的问题。
-
你忘了检查
recv的返回值!