插座sendto()返回EINVAL
我试图在C中发送一个UDP数据包.我有以下sendto(): char* msg = "Hello"; //ret is the return value of getaddrinfo, the address is AF_INET (IPv4) //and the sock_type is SOCK_DGRAM (UDP) struct sockaddr_in *ip = (struct sockaddr_in *)ret->ai_addr; if ((sendto(sock, msg, strlen(msg), 0, (struct sockaddr *)ip, sizeof(struct sockaddr *))) != -1) { printf("msg sent successfully"); } else { printf("Error sending msg: %s\n", strerror(errno)); }
14 2024-04-09
编程技术问答社区
C-sendto中的UDP服务器/客户端错误。协议不支持的地址族
我正在编写一个简单的说明性UDP服务器客户端.服务器应基于客户端输入计算客户端网络字节顺序,然后将其发送回客户端.我一直在尝试整天解决此错误.任何帮助都将受到赞赏.这是服务器启动和输出: ./udpserver.out 4545 from.sin_family: 12079 Little Endian ERROR UDP_SRV_004 - can not send message to client: Address family not supported by protocol 客户端开始: ./udpclient.out localhost 4545 服务器代码: #include #include #include #include #include #include #include
48 2024-04-09
编程技术问答社区
recvfrom: 坏地址, sendto: 协议不支持的地址族
我正在尝试在C中实现一个小udp-server/client应用程序,并在服务器端遇到两个错误: recvfrom:糟糕地址 && phortto: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]
26 2024-04-09
编程技术问答社区
在MacBook Pro上,Link-scope IPv6多播数据包突然无法路由?
这是一个有点晦涩的问题,但我很难过,我认为也许有人对这个问题有更多的线索. 我的同事已经成功运行了一个内部应用程序,该应用程序使用了MacBook Pro上使用IPv6多播的内部应用程序,但今天Mac决定停止路由多播数据包.特别是,该程序打印此错误: senddataudp(ff02 :: bead:cede:deed:feed@4)在网络接口[name = [en0] description = [] ip = [fe80 :: 222:41ff:fe21:dfd4@4] netmask = [fe80 :: 222:41ff:ip = [] [FFFF:FFFF:FFFF:FFFF ::]广播= [:::]] ...它很好地描述了出了什么问题...它尝试将UDP数据包发送到所示的IP地址,而Send()失败了Errno = Ehostunreach. 我不明白的是,什么可能导致IPv6链接多播地址"无法到达"?如果我对链接范围的多播的理解正确,则数据包只需要删除本
12 2024-04-08
编程技术问答社区
如何通过RAW套接字发送修改过的IPv6数据包?
我正在尝试通过C Linux的RAW套接字发送自定义的IPv6标头. 我已经使用IP_HDRINCL套接字选项在IPv4中成功了,但是,IPv6没有等效的. 我找到了一个解决方法在这里建议使用socket(AF_INET6, SOCK_RAW, IPPROTO_RAW)效果作为启用IP_HDRINCL插座选项. 插座是成功创建的,直到我使用修改后的标头sendto函数之前,我才会遇到任何错误. 我像这样设置了插座: static int socketFd = 0; static struct sockaddr_in6 remote; int main() { socketFd = socket (PF_INET6, SOCK_RAW, IPPROTO_RAW); if (socketFd
8 2024-04-08
编程技术问答社区
unix套接字错误14:EFAULT(坏地址)。
我有一个非常简单的问题,但是我整个周末都没有设法找到任何答案.我正在使用sendto()函数,它正在返回错误代码14:efault.男人的页面将其描述为: "An invalid user space address was specified for an argument." 我坚信这是在谈论我正在指定的IP地址,但是现在我怀疑它可能是消息缓冲区的内存地址 - 我找不到 - 我找不到在任何地方有任何澄清,任何人都可以清除吗? 解决方案 EFAULT如果某些参数传递给sendto(或更一般到任何系统调用)的内存地址无效.关于您的Syscall,将其视为内核土地上的一种SIGSEGV.例如,如果您通过无效或无效的缓冲指针(用于阅读,写作,发送,收回...),则会得到 参见 errno(3), EFAULT完全与IP地址无关. 其他解决方案 最小可运行的示例,getcpu 只是为了使事情变得更具体,我们可以查看getcpu系统调用,这很容易理解,并显示
4 2024-04-07
编程技术问答社区
在Linux上尝试使用`sendto()`与以太网`socket(AF_INET, ..., ...)`(IP输出数据包)时,如何修复`EPERM`错误?
这是一个大量减少的代码样本,按照我的代码从我的 ercaguy_hello_hello_hello_world 这里repo : socket__geeksforgeeks_udp_client_GS_edit_GREAT.c: #define SOCKET_TYPE_UDP_IPV4 AF_INET, SOCK_DGRAM, 0 // Create an IPv4 UDP socket to send Ethernet packets out to a connected device int socket_fd = socket(SOCKET_TYPE_UDP_IPV4); // Send a packet via `sendto()` const char msg_to_send[] = "Hello from client."; ssize_t num_bytes_sent = sendto(socket_fd, msg_to_send, si
4 2024-04-07
编程技术问答社区
sendto : 资源暂时不可用(errno 11)。
我对sendto有问题. 我有一个接收者,他接收带有recvfrom的UPD数据包,然后使用sendto回复发件人. 不幸的是,我得到了Errno 11(暂时不可用的资源).我正在使用两个插座. 第一个数据包实际上是发送的,但后来不是: sendto ::成功 错误:0. sendto ::资源暂时不可用 错误:11. sendto ::资源暂时不可用 ... 这是我的代码的摘录: int sockfd, sockSend; if ((sockfd = socket(AF_INET, SOCK_DGRAM, 0))
12 2024-04-07
编程技术问答社区
在C语言程序中发送ICMP数据包
我正在尝试在C中创建ICMP PING测试程序,但是很难成功发送数据包. sendto函数返回字节#,实际上没有发送数据包.我已经用目标计算机上的Wireshark对此进行了验证.主机上的常规ping可以正常工作并出现在Wireshark中. 这是我的代码: #include #include #include #include #include #include #include #include #include #include #include #include #include unsigned sho
2 2024-04-07
编程技术问答社区
套接字编程:sendto总是以errno 22 (EINVAL)失败。
我总是没有发送任何字节,使用此代码的ERRNO为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));
6 2024-04-06
编程技术问答社区
在C语言中通过Sockets传递结构
我正在尝试将整个结构从客户端传递到服务器或反之亦然.让我们假设我的结构如下 struct temp { int a; char b; } 我正在使用 sendto 并发送结构变量的地址,并使用 recvfrom 函数在另一侧接收它.但是我无法获得接收端发送的原始数据.在sendto函数中,我将接收到的数据保存到类型结构温度的变量中. n = sendto(sock, &pkt, sizeof(struct temp), 0, &server, length); n = recvfrom(sock, &pkt, sizeof(struct temp), 0, (struct sockaddr *)&from,&fromlen); 其中PKT是类型结构温度的变量. 事件,尽管我收到了8个数据,但如果我尝试打印,它只是显示垃圾值.修复它有任何帮助吗? 注意: 不必使用第三方库. edit1:我真的是这个序列化概念的新手.但是如果不进行序列化,我无法
0 2024-04-05
编程技术问答社区
7zip SFX Batch for SendTo Folder
7z a -mx9 -sfx %1.exe %1 这是我作为批处理文件所拥有的,如果我将文件或文件夹拖放到批处理文件上,我会以与原始文件相同的名称在超压缩的7zip sfx上获得.但这仅在文件与批处理文件的文件夹中时起作用. 我试图实现的目标是,将此批处理文件放入SendTo文件夹中,以便我可以将任何文件转换为高度压缩的EXE,这些文件出现在原始目录的文件夹中. 任何帮助都将不胜感激,我确定它很简单,但我不知道. 编辑5月29日 @ 16:50 [hkey_classes_root*\ shell \ compress to exe] [hkey_classes_root*\ shell \ compress to exe \ command] @=" \" c:\ program文件\ 7 -zip \ 7z \" u -mx9 -sfx -r -t7z \"%1.exe \" \" \" \"%1 \"" 将其添加到注册表或.reg文件以创建上
8 2024-03-29
编程技术问答社区
如何使用sendto()来发送一个结构
我创建了结构: struct buffer { string ProjectName ; string ProjectID ; } buffer buf; buf.ProjectID = "212"; buf.ProjectName = "MyProj"; 现在要使用sendto方法发送此结构,我正在打字结构并将其发送回下文: char *sendbuf = (char*)&buf; sentbytes = sendto(sock,sendbuf,strlen(sendbuf),0,(sockaddr*)&their_addr,sizeof(their_addr)); 但是,当我施放我的struct ti char*时,实际数据正在丢失其值,而调试时,我看到sendbuf包含了其他一些值. 可以让我知道如何使用sendto发送上述结构. 解决方案 您需要使用POD创建结构,字符串不是您可以以这种方式使用的内容.相反,您需要声明它之类的内
16 2023-12-10
编程技术问答社区
更快的winsock sendto()
我正在使用Windows Server 2008,并且我的程序在C ++中. 我在一段时间内使用winsock2和sendto(true)循环发送我的数据包. 像这样的代码: while(true) { if(c == snd->max) c = snd->min; dest.sin_addr.S_un.S_addr = hosts[c]; iphead->destaddr = hosts[c]; sendto(s, castpacket, pktsz, 0, castdest, szsad); ++c; } 我需要尽快将尽可能多的IP发送给主机std ::向量的IP. 我目前在i7 930服务器上运行,我只能达到350Mbps左右. 我当前将程序分为4个线程,所有程序都在为每个线程分配的不同服务器运行时循环. 添加更多线程或运行更多程序副本会导致较低的吞吐量. 我还有另一个程序正在运行侦听服
10 2023-12-10
编程技术问答社区
在Python中接受文件参数(来自发送至上下文菜单)
我要开始指出我几乎没有python的经验. alt Text http://wwwww.aquate.us/u/u/u/u/u/u/u/99864238642386112301229.j.jptp:/一个> 您可能知道,只需在Windows PC上的发送到文件夹中删除快捷方式,就可以允许程序将文件作为参数. 我将如何编写一个将此文件作为参数的Python程序? ,如果有人有机会,作为奖励 - 我如何将其与Urllib2集成以将文件发布到我的服务器上的PHP脚本? 上 预先感谢. 编辑 - 另外,我如何在sendto菜单中显示某些东西?我的印象是,您只需将快捷方式放入Sendto文件夹中,并且它会在菜单中自动添加一个选项... 没关系.我弄清楚我在做什么错:) 解决方案 找出拖动文件是什么: http://docs.python. org/library/sys.html#sys.argv 打开它: #open 在以下内容中阅读: stdtyp
16 2023-11-10
编程技术问答社区
Linux C++ IPv6 UDP Multicast sendto失败,errno EADDRNOTAVAIL (99) 无法分配请求的地址。
我正在尝试发送IPv6 UDP多播消息. 测试代码的一部分显示了两个部分,一个用于发送IPv6多播消息,另一个用于发送IPv4多播消息. IPv4的代码正常. ipv6代码总是失败,sendto,返回eaddrnotavail(99)无法分配请求的地址. ... if (ipV6Select) { // Create IPv6 DGRAM Socket int sock = socket(AF_INET6, SOCK_DGRAM, 0); if (sock
24 2023-11-02
编程技术问答社区
使用sendto发送时,如何强制UDP中的客户端打开端口?
我在udp(winsocks/c ++)中有简单的服务器和客户端. 我通过sendto发送数据报客户端 - >服务器,并使用从recvFrom函数获得的IP和端口从服务器回复. 我发现: 从不同端口发送来自客户端的每个发送器 试图从服务器窗口回复返回WSAECONNRESET(这意味着端口已关闭 - 使用SENDTO发送时,我如何正确回答服务器的客户端(即强制端口在客户端上绑定?) 编辑:添加一些源代码: bool InitClient() { internal->sock = socket(PF_INET, SOCK_DGRAM, 0); char8 yes = 1; setsockopt(internal->sock, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int32)); return internal->sock != -1; } void Send(const IpAddr
14 2023-11-02
编程技术问答社区
在发送UDP数据包时出现 "无效参数",但哪一个?
我的C ++应用程序将二进制数据作为UDP数据包发送. sendto()呼叫返回einval(无效的参数),但我对正在传递的参数没有任何错误. 我做了该应用程序的段,这是狂欢系统的调用: socket(PF_INET, SOCK_DGRAM, IPPROTO_IP) = 33 setsockopt(33, SOL_IP, IP_RECVERR, [1], 4) = 0 fcntl(33, F_SETFD, FD_CLOEXEC) = 0 bind(33, {sa_family=AF_INET, sin_port=htons(1510), sin_addr=inet_addr("127.0.0.1")}, 16) = 0 sendto(33, "\2055\5\0\0\0\1\0\0\0\1\20 \0t\0c\300Ny\274B\10*\206H\206\367\r\2\5\0\200\200\331'\344\272\322\362sD\277\312
24 2023-11-02
编程技术问答社区
实时操作系统上的 UDP 非阻塞套接字:sendto() 和 recvfrom() 能否返回部分信息?
这是我在这里的第一个消息. 我正在实时操作系统(ONTIME和VXWORKS)上使用非阻滞UDP插座. 我已经阅读了文档和一些论坛,但是我对sendto()和recvfrom()函数的"原子性"有一些疑问: sendto()返回字节数或错误的字节数.是否可能比输入缓冲区长度少?也许输出缓冲区没有足够的自由空间,只有很少的字节被招募... recvFrom()返回接收或错误的字节数.源发送的消息大小是否可能少?我的意思是部分消息阅读... 我希望阅读和写作功能是原子(完整消息或没有消息读/写). 谢谢. Emanuele. 我要求进行即时支持,他们告诉我,如果输出缓冲区没有足够的可用空间,sendto()可能会引入部分消息.我不知道在某些情况下还可以返回部分消息.我想在不同的操作系统之间没有插座实现的标准行为. 解决方案 我对这些系统并不真正熟悉,但是如果它们打破了正常的UDP插座语义,我会感到非常惊讶一个"接收". 其他解决方案 send
40 2023-11-02
编程技术问答社区
UDP发送时出现ECONNREFUSED错误
我正在使用正在写作的应用程序经历一些无法解释的行为 带有sendto()到多个端口的UDP数据(全部使用套接字打开(pf_inet, SOCK_DGRAGR,0))为一组客户阅读过程的好处.这些sendto()偶尔且无法预测地触发 econnrefused 错误.这发生在MacOS Sierra(10.12)系统上,该系统的Sendto(2)手动页面甚至都不列出 Econnrefused 可能是可能的错误.有趣的是,我有一个CentOS7系统(这些错误永远不会发生),其sendto(2)手动页面引用了udp(7)手册上记录的其他sendto()错误,而centos7 udp(7)页面说: econnrefused No receiver was associated with the destination address. This might be caused by a previous packet sent over the socket. ( Econnref
118 2023-11-02
编程技术问答社区