(UDP) GVCP 广播不起作用
Posted
技术标签:
【中文标题】(UDP) GVCP 广播不起作用【英文标题】:(UDP) GVCP BroadCast not functioning 【发布时间】:2017-05-31 04:13:01 【问题描述】:环境:使用 VC++ 2010 进行 Windows Socket 编程
GVCP : GigE 视觉控制协议
GVCP = UDP+(GVCP 标头数据+有效负载数据)。所以基本上它只是一个UDP
为了检测 GigE Sensor(摄像头)需要先广播一个 GVCP 数据包(包含 Gvcp Payload 数据),使用广播地址 255.255.255.255
但是当我更改广播地址 255.255.255.255 时,我只能通过 192.168.1.255 进行广播(如在wire-shark 上看到的),wire-shark 和其他机器上都看不到任何东西
所以问题是无法使用 UDP/WinSock 使用 IP 255.255.255.255 进行广播
【问题讨论】:
【参考方案1】:能够开始广播 GVCP 数据包,它只是一个套接字创建错误,正确的错误如下
//---------------------DATA SENDER------------------------------
struct sockaddr_in Sender_addr;
int Sender_addrlen = sizeof(Sender_addr);
Sender_addr.sin_family = AF_INET;
Sender_addr.sin_port = htons(CAMPORT); //BROADCAST_PORT);
Sender_addr.sin_addr.s_addr = inet_addr("255.255.255.255"); //Broadcast
IP Here");
//---------------------DATA RECEIVER----------------------------
struct sockaddr_in Recv_addr;
int Recv_addrlen = sizeof(Recv_addr);
Recv_addr.sin_family = AF_INET;
Recv_addr.sin_port = htons(PCPORT);
Recv_addr.sin_addr.s_addr = INADDR_ANY;
if(bind(sock,(sockaddr*)&Recv_addr,sizeof(Recv_addr))<0)
perror("bind");
_getch;
closesocket(sock);
//and then send command for GVCP packet (GVCP packet Structure is )
TxBuff[0] = 0x42;
TxBuff[1] = 0x01;
TxBuff[2] = 0x00;
TxBuff[3] = 0x02;
TxBuff[4] = 0x00;
TxBuff[5] = 0x00;
TxBuff[6] = 0x00;
TxBuff[7] = 0x02;
if(sendto(sock,TxBuff,TxBuffSize,0,(struct sockaddr
*)&Sender_addr,sizeof(Sender_addr)) <0)
perror("send: error ");
_getch();
closesocket(sock);
【讨论】:
以上是关于(UDP) GVCP 广播不起作用的主要内容,如果未能解决你的问题,请参考以下文章