Tôi đang sử dụng System.Net.Sockets
Socket
lớp để nhận các gói dữ liệu UDP. Tôi muốn biết chiều dài chính xác của datagram nhận được để kiểm tra tính hợp lệ của datagram.kích thước của gói dữ liệu xếp hàng tiếp theo - UDP
Socket.Receive(Byte())
phương pháp tài liệu nói:
Nếu bạn đang sử dụng một Socket kết nối, Nhận sẽ đọc đầu tiên xếp hàng đợi gói tin từ địa chỉ đích bạn chỉ định trong phương pháp Connect. Nếu datagram bạn nhận được lớn hơn kích thước của tham số đệm, bộ đệm sẽ được lấp đầy với phần đầu tiên của thông báo, dữ liệu dư thừa bị mất và một SocketException được ném ra.
Socket.Available
thuộc tính cung cấp tổng số byte có sẵn để đọc, Điều này được tính tổng kích thước của tất cả các gói dữ liệu được xếp hàng đợi.
Có cách nào tôi có thể tìm ra kích thước của datagram tiếp theo không?
public static void Receive()
{
Byte[] buf, discardbuf;
const int paklen = 32; //correct packet length
int l;
buf = new Byte[paklen];
discardbuf = new Byte[4096];
while (rcv_enable)
{
l = soc.Available;
if (l == 0) continue;
if (l == paklen) soc.Receive(buf); //receive the correct packet
else soc.Receive(discardbuf); //discard otherwise
Thread.Sleep(200);
Console.WriteLine("Received {0}", l);
};
}
Hoàn hảo! Quá tải này thực hiện công việc và không có ngoại lệ nào bị ném. Dường như, Tài liệu MSDN không chính xác. Cảm ơn.-BTW Tôi không thể tìm thấy bất kỳ ví dụ có liên quan cho [SocketFlags enum] (http://msdn.microsoft.com/en-us/library/system.net.sockets.socketflags.aspx) trong MSDN. – Anniffer
@Anniffer tuyệt vời, vui lòng chấp nhận câu trả lời này nếu câu trả lời của bạn được giải đáp :) –
Đã chấp nhận ..... :) – Anniffer