Tag: sendto

recvfrom:错误地址,sendto:协议不支持的地址族

我正在尝试在C中实现一个小的UDP服务器/客户端应用程序,并在服务器端出现两个错误: recvfrom:错误的地址 && sendto:协议不支持的地址系列 。 我搜索了这个错误并搜索了答案,但不幸的是,他们并没有真正帮助…也许我正在以错误的方式投射参数并且没有得到它。 我希望你能给我一个提示:)。 #include #include #include #include #include #include #define BUFFSIZE 256 #define IP “127.0.0.1” #define PORT 7755 int main(void){ int socket_fd = socket(AF_INET, SOCK_DGRAM, 0); char buffer[1] = “s”; struct sockaddr_in src_addr; struct sockaddr_in dest_addr; src_addr.sin_family = AF_INET; src_addr.sin_port = htons(PORT); src_addr.sin_addr.s_addr = inet_addr(IP); if(socket_fd==-1) perror(“socket”); if(bind(socket_fd, (struct sockaddr*)&src_addr, sizeof(src_addr))==-1) […]

链接范围IPv6多播数据包突然无法在MacBook Pro上路由?

这是一个有点模糊的问题,但我很难过,我想也许有人可能会对这个问题有更多的线索。 我的同事已成功运行一个内部应用程序,在他的MacBook Pro上使用IPv6多播几个月,但今天Mac决定停止路由多播数据包。 特别是,程序打印此错误: 网络接口上的SendDataUDP(ff02 :: bead:cede:deed:feed @ 4)失败[名称= [en0]描述= [] IP = [fe80 :: 222:41ff:fe21:dfd4 @ 4]网络掩码= [ffff: ffff:ffff:ffff ::] Broadcast = [::]](错误= 65 /无主机路由)。 …它很好地描述了出错的地方……它试图将UDP数据包发送到所显示的IP地址,并且发送()失败并使用errno = EHOSTUNREACH。 我不明白的是,什么可能导致IPv6链路范围多播地址“无法访问”? 如果我对链路范围组播的理解是正确的,那么数据包只需要从本地以太网端口出来(在这种情况下为en0,它在该机器上运行)。 我缺少多播的某些方面,还是他的机器只是被塞了? 他说他没有改变什么,只是神秘地停止了工作。

使用recvfrom()和sendto()发送结构

我使用的是C语言 ,它是服务器和客户端的通用平台 。 我有一个特定类型的结构,我想从服务器发送到客户端。 例如 服务器代码 //necessary declarations struct hostent *hp; hp=gethostbyname(“www.google.com”); sendto(sockDes,&hp,sizeof(hp),0,(struct sockaddr *)&cli_addr,sizeof(cli_addr)); 客户代码 struct hostent *hp; msg=recvfrom(mysock,&hp,sizeof(hp),0,(struct sockaddr)&serv_addr,&size_len); 所以,基本上我想从服务器向客户端发送一个结构。 但是从上面的代码中我得到了分段错误,我不确定这种结构转移是否可行。 有什么出路吗?

套接字编程:sendto总是以errno 22(EINVAL)失败

我总是没有发送任何字节,使用此代码的错误为22(EINVAL,无效参数)。 destination_host在别处设置并且已知有效,所以我真的看不到发生了什么。 MAXMSGSIZE是1000.没有错误或警告。 我正在使用-Wall -Werror -pedantic编译 char *data_rec; u_int data_len; int sockfd; uint16_t *ns; struct sockaddr_in address; struct sockaddr *addr; char *ip; int i; int errno; int bytes_sent; data_len = MAXMSGSIZE; data_rec = malloc(sizeof(char)*MAXMSGSIZE); ns = malloc(MAXMSGSIZE*sizeof(uint16_t)); ip = malloc(MAXMSGSIZE*sizeof(char)); data_rec = “some random test stuff”; sockfd = socket(PF_INET, SOCK_DGRAM, IPPROTO_UDP); if(sockfdh_addr,ip,MAXMSGSIZE); memset(&address, 0, sizeof(address)); […]

在C程序中发送ICMP数据包

我正在尝试在C中创建一个ICMP ping测试程序,但是在成功发送数据包时遇到了困难。 sendto函数返回字节数和所有内容但实际上没有发送数据包。 我已经在目标计算机上使用WireSharkvalidation了这一点。 主机上的常规ping工作正常,但在WireShark中显示。 这是我的代码: #include #include #include #include #include #include #include #include #include #include #include #include #include unsigned short cksum(unsigned short *addr, int len); int main(int argc, char *argv[]) { int sock; char send_buf[400], recv_buf[400], src_name[256], src_ip[15], dst_ip[15]; struct ip *ip = (struct ip *)send_buf; struct icmp *icmp = (struct icmp *)(ip + […]