我正在用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),以演示問題的實際應用。 –