UDP编程时经常需要使用sendto()和recvfrom()两个函数,其中recvfrom()的函数原型是:
ssize_t recvfrom(int sockfd, void *buf, size_t len, int flags,
struct sockaddr *src_addr, socklen_t *addrlen);
一般来说第二个变量buf和第三个变量len是难点。buf是指针就可以了,并不一定是char*类型,但是如果你想直接发送和接收结构体类型的指针,往往会出错(比如Bad Address或者Segmentation fault之类的)。事实证明,还是得使用char*作为buffer来接收数据。
例子:
我有一个结构体:
struct dv_element{
char dest;
int dist;
};
struct distance_vector{
char sender;
int num_of_dests;
dv_element dve[6];
};
在发送和接收的代码前,我定义了
#define ECHOMAX sizeof(struct distance_vector) //maximum incoming data length
distance_vector rcdv; //store the incoming distance vector
distance_vector dv; //store the outgoing distance vector
int dvLen =