2012-05-31 48 views
31

Tôi có 2 chương trình, 1 chương trình để gửi tin nhắn phát sóng UDP và 1 chương trình đang nghe chương trình phát sóng này. Vấn đề của tôi là đôi khi tôi gửi một phát sóng, người nhận nhận được 2 tin nhắn. Tại sao?Gửi UDP phát sóng, nhận nhiều tin nhắn

đang Receiver: Mã

public class Receiver { 
    private readonly UdpClient udp = new UdpClient(15000); 
    private void StartListening() 
    { 
    this.udp.BeginReceive(Receive, new object()); 
    } 
    private void Receive(IAsyncResult ar) 
    { 
    IPEndPoint ip = new IPEndPoint(IPAddress.Any, 15000); 
    byte[] bytes = udp.EndReceive(ar, ref ip); 
    string message = Encoding.ASCII.GetString(bytes); 
    StartListening(); 
    } 
} 

Tên người gửi:

public class Sender { 
    public void Send() { 
    UdpClient client = new UdpClient(); 
    IPEndPoint ip = new IPEndPoint(IPAddress.Broadcast, 15000); 
    byte[] bytes = Encoding.ASCII.GetBytes("Foo"); 
    client.Send(bytes, bytes.Length, ip); 
    client.Close(); 
    } 
} 
+0

hi. Tôi muốn sử dụng mã của bạn để chuyển tệp UDP. nhưng tôi không biết phải làm gì với phần Nhận! làm thế nào nó nên được thực hiện? làm thế nào nó sẽ bắt đầu nhận được công cụ từ mạng? – Shamim

+0

@Shamim, có rất nhiều tài nguyên trên web, một chút googling sẽ giúp ích. Tìm các ví dụ về máy khách/máy khách. –

+0

'IPEndPoint ip = new IPEndPoint (IPAddress.Any, 15000);' chỉ có thể là 'IPEndPoint ip = null;' - nó không phải là một cấu trúc. Việc sử dụng nó trong phương thức 'EndReceive()' là định nghĩa người gửi. Populating nó với bất cứ điều gì ở tất cả là một chút gây hiểu lầm. – maxp

Trả lời

26

Nói đúng ra, gói trùng lặp trong mạng IP được cho phép hành vi của mạng và bạn có để có thể đối phó với nó trong phần mềm của bạn ngay cả khi bạn bằng cách nào đó sẽ loại bỏ nó trong thời gian này. Nếu bạn đang tự hỏi tại sao điều này xảy ra trong trường hợp cụ thể của bạn ... ngay từ cái nhìn đầu tiên tôi thấy không có gì sai với mã của bạn. Bạn có một số địa chỉ IP trên cổng Ethernet của máy tính của bạn hoặc một số như vậy? Tôi nghĩ rằng wireshark có thể giúp bạn biết thêm chi tiết về những gì đang diễn ra.

+5

Câu hỏi của bạn đã trả lời câu hỏi đó. Không dây máy tính xách tay của tôi đã được bật trong khi tôi đã được kết nối thông qua cáp là tốt. Vì vậy, tôi đã nhận được gói thông qua cáp và không dây. Cảm ơn bạn. –

6

Gói UDP không đáng tin cậy, hoàn toàn có thể bạn sẽ nhận được cùng một gói hai lần hoặc thậm chí không có gì cả, khi sử dụng udp bạn cần bao gồm một số loại ID duy nhất trong dữ liệu của mình để bạn có thể loại bỏ lỗi hoặc yêu cầu gửi lại.

Các vấn đề liên quan