Non avevo mai usato l'UDP prima, quindi ho provato. Per vedere cosa succederebbe, ho avuto il 'server' inviare i dati ogni mezzo secondo, e il client riceve i dati ogni 3 secondi. Pertanto, anche se il server invia i dati molto più rapidamente di quanto possa ricevere il client, il client lo riceve ancora in modo ordinato uno per uno.Dove vengono memorizzati i dati inviati da UDP?
Qualcuno può spiegare perché/come ciò accade? Dove si trova esattamente il buffer dei dati?
Invia
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);
}
}
Tutti CSomeObjServer non c'è da incrementare un numero intero di uno ogni mezzo secondo
Ricevi
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);
}
}
}
negozi CSomeObjClient la variabile e ha una funzione (alterSomeVar) per aggiornarlo
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
Plaudo vostra natura curiosa, +1 – spender
il sistema operativo ha uno stack di rete che di solito ha alcuni buffer ... fino a quando ciò che si invia si inserisce in questi buffer senza problemi ... poiché UDP non è garantito, in ogni caso i dati potrebbero essere scartati, ecc. – Yahia
Il client e il server sono in esecuzione sulla stessa macchina? – grieve