static async Task Receive() { IPEndPoint remoteEP = new IPEndPoint(IPAddress.Any, 0); await Task.Run(() => { while (true) { var bytRecv = udpClient.Receive(ref remoteEP); string message = Encoding.Unicode.GetString(bytRecv, 0, bytRecv.Length); Console.WriteLine($"form {remoteEP} : {message}"); var env = JsonConvert.DeserializeObject <envelope>(message); //需要确认的信息 if (env.number > 0) { envelope confirmEnv = new envelope(); confirmEnv.type = envelopeType.confirm; confirmEnv.number = env.number; send(confirmEnv, remoteEP); } if (connectUser == null && env.type == envelopeType.connectTo) { var user = JsonConvert.DeserializeObject <connectTo>(env.body); connectUser = new IPEndPoint(IPAddress.Parse(user.ip), user.port); send("你好", connectUser); Console.WriteLine($"你现在可以和[{user.ip}:{user.port}]发送信息了"); } } }); }
static async Task sendConfirm(envelope env, IPEndPoint remoteEP) { confirmTask cf = null; await Task.Run(() => { lock (lockNumber) { env.number = ++number; } cf = new confirmTask() { number = number, isConfirm = false }; numberConfirms.Add(cf); var sendbytes = Encoding.Unicode.GetBytes(JsonConvert.SerializeObject(env)); for (int i = 0; i < 3; i++) { udpServer.Send(sendbytes, sendbytes.Length, remoteEP); Thread.Sleep(5000); if (cf.isConfirm) { break; } } }).ContinueWith(t => numberConfirms.Remove(cf)); }
static void Main(string[] args) { Console.WriteLine("Int형 Envelope"); envelope<int> intEnvelope = new envelope<int>(); intEnvelope.showSize(); Console.WriteLine("추가 1, 10, 20, 50"); intEnvelope.addShape(1, 10, 20, 50); intEnvelope.showSize(); Console.WriteLine("추가 -6, 1, 15, 100"); intEnvelope.addShape(-6, 1, 15, 100); intEnvelope.showSize(); Console.WriteLine(""); Console.WriteLine("double형 Envelope"); envelope<double> doubleEnvelope = new envelope<double>(); doubleEnvelope.showSize(); Console.WriteLine("추가 1.1, 10.2, 20.2, 50.2"); doubleEnvelope.addShape(1.1, 10.2, 20.2, 50.2); doubleEnvelope.showSize(); Console.WriteLine("추가 -6.5, 1.1, 15.3, 100.4"); doubleEnvelope.addShape(-6.5, 1.1, 15.3, 100.4); doubleEnvelope.showSize(); }
static void send(string msg, IPEndPoint remoteEP) { envelope env = new envelope(); env.type = envelopeType.message; env.body = msg; send(env, remoteEP); }
static void sendContentMessage(userInfo toUser, userInfo contentUser) { envelope env = new envelope(); env.type = envelopeType.connectTo; connectTo body = new connectTo(); body.ip = contentUser.ip; body.port = contentUser.port; env.body = JsonConvert.SerializeObject(body); sendConfirm(env, new IPEndPoint(IPAddress.Parse(toUser.ip), toUser.port)); }
static void Main(string[] args) { Receive(); Thread.Sleep(1000); Console.WriteLine("等待对方连接..."); //进行连接 envelope env = new envelope(); env.type = envelopeType.connect; send(env, serverEP); while (true) { var str = Console.ReadLine(); if (connectUser != null) { send(str, connectUser); } } }
static void send(envelope env, IPEndPoint remoteEP) { var sendbytes = Encoding.Unicode.GetBytes(JsonConvert.SerializeObject(env)); udpClient.Send(sendbytes, sendbytes.Length, remoteEP); }
public EvpMatrices(EndianBinaryReader er, int NumNodes) { m = new envelope[NumNodes]; for (int i = 0; i < NumNodes; i++) { m[i] = new envelope(er); } }