我正在用C++编程UDP中继服务器。但我有一个问题。C++,UDP,sendto需要延时才能工作
我有一个基本的循环,只是调用recvfrom()
,检查数据包中的错误,然后读取“目标”出包,并在同一插座上使用sendto()
发送一个数据包到目标客户,这也是中继在同一台服务器上。
问题是,如果我不在sendto()
之前添加延迟(此延迟取决于连接速度,所以我不能静态设置),几乎所有数据包都会丢失。
m_iSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
bind(m_iSocket, (SOCKADDR*)&m_oSockAddress, sizeof(SOCKADDR_IN));
...
while(true) {
recvfrom(m_iSocket, (char*)m_pRecvBuffer, m_nBufferSize, 0, (SOCKADDR*)&remoteAddr, &remoteAddrLen);
...
sendto(m_iSocket, reinterpret_cast<char*>(rw.getData()), rw.getBufferSize(), 0, targets address , address size);
}
任何想法?
失去了如何?你使用数据包嗅探器来观看UDP流量吗?你不应该需要任何延迟。请提供一个[最小化,完整和可验证的示例](/ help/mcve),以演示问题的实际应用。 –