我試圖通過recvfrom接收數據包的一部分。實際上,它的工作原理是這樣的:通過recvfrom(UDP)接收數據包的一部分
recvfrom(sockfd, serialised_meta, 12, flags, src_addr, addrlen);
recvfrom(sockfd, serialised_buf, BUFLEN, flags, src_addr, addrlen);
的數據是這樣的發送:
bufd->Serialise(serialised_buf, BUFLEN+12);
sendto(sockfd, serialised_buf, BUFLEN+12, flags, dest_addr, addrlen);
這樣的想法是,先讀一些元數據,然後決定是否接受其他的東西。問題是,如果第二個緩衝區(serialised_buf)在開頭,我會收到4'/ 0'字節。它似乎不是序列化問題,我之前使用過序列化,並且一切都很酷,而我一次收到整個數據包(元數據和數據)。 關於如何修復它的任何想法?
PS。我知道我可以跳過不必要的字節)但無論如何,爲什麼它可能會發生?
好的,那我的解決方案怎麼可能呢?這只是出於好奇)。如果數據包的剩餘部分被丟棄,則第二個recvfrom應該可以工作。提前致謝! 現在,我想,首先獲取meta的最好方法是使用peek標誌? – Roman
如果你正在談論數據包的長度,你可以通過使用帶'FIONREAD'的'ioctl'來確定。你可以使用'MSG_PEEK',但是我不會打擾,除非你的數據包數據很大,而你的元數據很小......可能最好只跳過'ioctl'並且完全掃描並且具有最大緩衝區大小(對於你的應用程序)準備好去跳過/放棄數據。 – mark