gpt4 book ai didi

c - 单播UDP数据包丢失

转载 作者:行者123 更新时间:2023-11-30 16:58:37 26 4
gpt4 key购买 nike

单播(一对一)UDP通信,每次收到的数据包不一样;如果我在 500 毫秒的间隔内发送 1000 个数据包,则会丢失 9 个数据包。我正在Windows平台VCC 6.0上工作;使用sendto系统调用发送以太网数据包。在主机端,我由于校验和错误或 header 错误而错过了数据包。

如果您需要更多详细信息,请告诉我。我的议程是我不应该错过目标端的任何数据包。任何有关此问题的帮助将不胜感激。

{
//Initialize local variables
MAINAPP(pAppPtr);
int iResult = 0;
int sRetVal = 0;
static char cTransmitBuffer[1024];
unsigned long ulTxPacketLength =0;
int in_usTimeOut = 0;
unsigned short usTimeout = 0;

S_QJB_POWER_CNTRL S_Out_QJB_Power_Cntrl = {0};

pAppPtr->S_Tcp_Handle.Tcp_Tx_Msg.m_ucHeader[0] = QJB_TCP_HEADER_BYTE1;

pAppPtr->S_Tcp_Handle.Tcp_Tx_Msg.m_ucHeader[1] = QJB_TCP_HEADER_BYTE2;

pAppPtr->S_Tcp_Handle.Tcp_Tx_Msg.m_usCmdID = QJB_ETH_POWER_ON;

pAppPtr->S_Tcp_Handle.Tcp_Tx_Msg.m_usCmdResults = 0;

pAppPtr->S_Tcp_Handle.Tcp_Tx_Msg.m_usDataSize = sizeof(S_QJB_POWER_CNTRL);

//Fill the controls & delay
sRetVal = PowerCntrlStructFill(&pAppPtr->S_Tcp_Handle.Tcp_Tx_Msg.U_Tcp_Msg.S_QJB_PowerCntrl,&usTimeout);

if(sRetVal)
{
return sRetVal;
}

pAppPtr->S_Tcp_Handle.Tcp_Tx_Msg.m_usReserved = 0;

pAppPtr->S_Tcp_Handle.Tcp_Tx_Msg.m_usChecksum = 0;
//Perform Endian Swap
pAppPtr->objEndianConv.EndianSwap(&pAppPtr->S_Tcp_Handle.Tcp_Tx_Msg.U_Tcp_Msg.S_QJB_PowerCntrl, &S_Out_QJB_Power_Cntrl);

//Frame the transmission packet
QJB_Frame_TXBuffer(cTransmitBuffer, &(pAppPtr->S_Tcp_Handle.Tcp_Tx_Msg), &ulTxPacketLength,(void *)&S_Out_QJB_Power_Cntrl);

//Send the data to the target
iResult = sendto(pAppPtr->sktConnectSocket,cTransmitBuffer,ulTxPacketLength,0,(struct sockaddr *)&pAppPtr->g_dest_sin, sizeof(pAppPtr->g_dest_sin));
if(iResult == SOCKET_ERROR)
{
return QJB_TARGET_DISCONNECTED;
}

memset(&pAppPtr->S_Tcp_Handle.Tcp_Rx_Msg,0,sizeof(S_QJB_ETHERNET_PKT));// 1336
//Send the Command and obtain the response
sRetVal = QJB_ETHResRev(pAppPtr->sktConnectSocket,&pAppPtr->S_Tcp_Handle.Tcp_Rx_Msg,3);
return sRetVal;
}

萨蒂什库玛。

最佳答案

不幸的是,由于 UDP 不保证传送,因此网络堆栈可以随时出于任何原因丢弃您发送的数据包。值得注意的是,数据包到达的顺序也没有顺序保证。

如果订购和交付对您的应用程序至关重要(我认为确实如此),请考虑切换到 TCP。

关于c - 单播UDP数据包丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38693519/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com