Tôi chưa bao giờ sử dụng UDP trước đây, vì vậy tôi đã cho nó một đi. Để xem điều gì sẽ xảy ra, tôi đã có 'máy chủ' gửi dữ liệu mỗi nửa giây và máy khách sẽ nhận dữ liệu sau mỗi 3 giây. Vì vậy, ngay cả khi máy chủ đang gửi dữ liệu nhanh hơn nhiều so với máy khách có thể nhận được, khách hàng vẫn nhận được tất cả gọn gàng từng cái một.Dữ liệu được gửi bởi UDP được lưu ở đâu?
Mọi người có thể giải thích lý do tại sao/điều này xảy ra như thế nào? Dữ liệu được đệm chính xác ở đâu?
Gửi
class CSimpleSend
{
CSomeObjServer obj = new CSomeObjServer();
public CSimpleSend()
{
obj.changedVar = varUpdated;
obj.threadedChangeSomeVar();
}
private void varUpdated(int var)
{
string send = var.ToString();
byte[] packetData = System.Text.UTF8Encoding.UTF8.GetBytes(send);
string ip = "127.0.0.1";
int port = 11000;
IPEndPoint ep = new IPEndPoint(IPAddress.Parse(ip), port);
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
client.SendTo(packetData, ep);
Console.WriteLine("Sent Message: " + send);
Thread.Sleep(100);
}
}
Tất cả CSomeObjServer không được tăng một số nguyên bởi một mỗi nửa thứ hai
Nhận
class CSimpleReceive
{
CSomeObjClient obj = new CSomeObjClient();
public Action<string> showMessage;
Int32 port = 11000;
UdpClient udpClient;
public CSimpleReceive()
{
udpClient = new UdpClient(port);
showMessage = Console.WriteLine;
Thread t = new Thread(() => ReceiveMessage());
t.Start();
}
private void ReceiveMessage()
{
while (true)
{
//Thread.Sleep(1000);
IPEndPoint remoteIPEndPoint = new IPEndPoint(IPAddress.Any, port);
byte[] content = udpClient.Receive(ref remoteIPEndPoint);
if (content.Length > 0)
{
string message = Encoding.UTF8.GetString(content);
if (showMessage != null)
showMessage("Recv:" + message);
int var_out = -1;
bool succ = Int32.TryParse(message, out var_out);
if (succ)
{
obj.alterSomeVar(var_out);
Console.WriteLine("Altered var to :" + var_out);
}
}
Thread.Sleep(3000);
}
}
}
cửa hàng CSomeObjClient biến và có một chức năng (alterSomeVar) để cập nhật nó
Ouput:
Sent Message: 1
Recv:1
Altered var to :1
Sent Message: 2
Sent Message: 3
Sent Message: 4
Sent Message: 5
Recv:2
Altered var to :2
Sent Message: 6
Sent Message: 7
Sent Message: 8
Sent Message: 9
Sent Message: 10
Recv:3
Altered var to :3
Tôi hoan nghênh bản chất tò mò của bạn, 1 – spender
hệ điều hành có một chồng mà mạng thường có một số bộ đệm ... miễn là những gì bạn gửi phù hợp vào những bộ đệm không có vấn đề ... vì UDP không được đảm bảo anyways dữ liệu có thể được loại bỏ vv – Yahia
Là khách hàng và máy chủ đang chạy trên cùng một máy? – grieve