Nunca había usado UDP antes, así que lo intenté. Para ver qué pasaría, el 'servidor' enviaba datos cada medio segundo y el cliente recibía datos cada 3 segundos. Entonces, aunque el servidor está enviando datos mucho más rápido de lo que el cliente puede recibir, el cliente aún lo recibe todo uno por uno.¿Dónde se almacenan los datos enviados por UDP?
¿Alguien puede explicar por qué/cómo sucede esto? ¿Dónde se almacenan los datos exactamente?
Enviar
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);
}
}
Todo CSomeObjServer no se incrementa un entero por uno cada medio segundo
Recibe
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);
}
}
}
tiendas CSomeObjClient la variable y tiene una función (alterSomeVar) para actualizarlo
salida de la señal:
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
Aplaudo su naturaleza inquisitiva, 1 – spender
el sistema operativo tiene una pila de red que por lo general tiene algunos búferes ... siempre que lo que envíe encaje en esos búferes no hay problema ... ya que UDP no está garantizado de todos modos los datos pueden descartarse, etc. – Yahia
¿Se ejecutan el cliente y el servidor en la misma máquina? – grieve