关于udp发broadcast广播包sendto返回-1

如题所述

第1个回答  2022-07-19
最近在调试linux下的udp广播,发现当addr设置成server.sin_addr.s_addr = INADDR_BROADCAST;
时候,调用sendto返回-1,在网上找了好多资料都没结果。后来无意间发现原来调用

res = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &server, sizeof(server))

因为默认情况下套接字是不指出广播的,必须设置套接字描述符支持广播才行。

问题解决,为了防止大家也遇上这种问题,写下此文分享一下。

借鉴http://blog.csdn.net/dxpqxb/article/details/38403199

关于udp发broadcast广播包sendto返回-1
最近在调试linux下的udp广播,发现当addr设置成server.sin_addr.s_addr = INADDR_BROADCAST;时候,调用sendto返回-1,在网上找了好多资料都没结果。后来无意间发现原来调用 res = setsockopt(sock, SOL_SOCKET, SO_BROADCAST, &server, sizeof(server))因为默认情况下套接字是不指出广播的,必须设置...

UDP丢包原因总结
发送的包比64K大会导致UDP协议sendto返回错误。发送的包比MTU大,UDP包在接收端容易丢包,可查看接收端的网卡统计。可考虑把包切分到MTU一下再发送。发包速度太快的话,可能有两个问题:1.接收端来不及接收导致接收端丢包。2.发送端网卡处理不过来。这个时候sendto没有返回错误,但是用netstat查看会发...

UDP协议 sendto 和 recvfrom 浅析与示例
(3)使用bind()函数绑定监听端口,将套接字文件描述符和地址类型变量(struct sockaddr_in)进行绑定;(4)接收客户端的数据,使用recvfrom()函数接收客户端的网络数据;(5)向客户端发送数据,使用sendto()函数向服务器主机发送数据;(6)关闭套接字,使用close()函数释放资源。客户端操作步骤:(...

求用udp发广播消息的C代码。
saUdpServ.sin_addr.s_addr = htonl ( INADDR_BROADCAST );saUdpServ.sin_port = htons (7001);\/\/发送用的端口,可以根据需要更改 nSize = sizeof ( SOCKADDR_IN );while(1){ sprintf(sendBuff,"Message %d",ncount++);sendto ( sockListener,sendBuff,lstrlen (sendBuff),0,(SOCKADDR *...

UDP传输 :recvfrom 函数与 sendto 函数分析
UDP套接字作为一种无连接协议,其数据传输需要通过sendto函数进行发送,而数据的接收则依赖于recvfrom函数。在使用sendto函数发送数据时,需要明确指定目的地址。sendto函数与send函数的功能相似,recvfrom函数与recv函数的功能也相似。不过,sendto和recvfrom函数的参数中包含了对方的地址信息,这两个函数是...

sendto()注释
数据报类套接口的使用需注意发送数据长度不得超过通讯子网的IP包最大长度,此长度在WSAStartup()调用返回的WSAData的iMaxUdpDg元素中。若数据过长无法通过下层协议,将返回WSAEMSGSIZE错误,数据不被发送。成功调用sendto()并不保证数据传输成功。此函数主要用于SOCK_DGRAM类型套接口向特定端点发送数据报。

请教UDP发送函数sendto的使用问题
SOCKET sendSocket = socket(AF_INET, SOCK_DGRAM, 0);if(INVALID_SOCKET == m_sdpSendSocket){ AfxMessageBox(_T("创建SOCKET失败!"));return;} BOOL optval;lRet=setsockopt(sendSocket, SOL_SOCKET, SO_BROADCAST, (LPSTR)&optval, sizeof(optval));\/\/设定为广播形式 if(-1==lRet){ AfxM...

UDP怎么会返回Connection refused错误
ICMP 192.168.1.20 udp port 12345 unreachable, length 40 接下来第二个sendto返回:write: Connection refused 由于第二次没有发送任何数据包到达192.168.1.20,所以也不能企望它返回ICMP错误信息,因此接下来的recvfrom调用会阻塞。最后的一个问题时,你不能太指望这个Connection refused以及一切带外...

用udp来传送文件,发送端sendto加上了 sleep(100)。 接受端recvfrom 用...
有一种可能是,你发的前8包把接收端的socket缓存占完了,后面到来的包放不下全被丢弃了。建议的调试方法:1.增加接收端的套接字的buffer缓存。2.发送端每次发的包小一点。3.发送端sleep时间长一点,比如1秒。

...环境下编写udp客户端程序。为什么使用sendto发送数据时,接收端接收...
1、检查客户端和服务端的端口号是否一致;2、接收端的socket要采用block模式,数据收到后打印出来.

相似回答
大家正在搜