//这个线程方法用来循环接收消息 void ReceiveMessage() { while (true) { if (!clientSocket.Connected) { break; } int length = clientSocket.Receive(data); //message = Encoding.UTF8.GetString(data,0,length); if (length > 0) { TheMsg msg2 = ProtobufferTool.Deserialize <TheMsg>(data); message = $"{msg2.Name}说:{msg2.Content}"; sw.Stop(); //获取运行时间间隔 TimeSpan ts = sw.Elapsed; //获取运行时间[毫秒] long times = sw.ElapsedMilliseconds; //获取运行的总时间 long times2 = sw.ElapsedTicks; Debug.Log($"times={times} times2={times2}"); } } }
private void ReceiveMessage() { while (true) { //在接收数据时判断一下Socket是否端口连接 if (clientSocket.Poll(10, SelectMode.SelectRead)) { clientSocket.Close(); //关闭当前连接 break; //跳出循环,终止该线程执行 } int length = clientSocket.Receive(data); //string message = Encoding.UTF8.GetString(data, 0, length); //ToDo: 接收到数据时,要把该数据分发到各个客户端 //byte[] data = System.Text.Encoding.UTF8.GetBytes(message); //直接广播这个消息 TCPServer.BroadcastMessage(data); if (length > 0) { TheMsg msg2 = ProtobufferTool.Deserialize <TheMsg>(data); string message = string.Format("{0}说: {1}", msg2.Name, msg2.Content); Console.WriteLine("收到了消息:" + message + "[" + length + "]"); } } }
void Update() { TheMsg msg = new TheMsg(); msg.Name = "am the name"; msg.Num = 32; if (debug) { Debug.Log(string.Format("The Msg is ( Name:{0},Num:{1} )", msg.Name, msg.Num)); } TheMsg msg2 = null; using (var ms = new MemoryStream(msg.CalculateSize())) { msg.WriteTo(ms); ms.Seek(0, SeekOrigin.Begin); msg2 = TheMsg.Parser.ParseFrom(ms); } if (debug) { Debug.Log(string.Format("The Msg2 is ( Name:{0},Num:{1} )", msg2.Name, msg2.Num)); } //新建一个Person对象,并赋值 Person p = new Person(); p.Name = "IongX"; p.Age = Time.frameCount; p.NameList.Capacity = 4; p.NameList.Add("熊"); p.NameList.Add("棒"); p.NameList.Add("棒"); //将对象转换成字节数组 byte[] databytes = p.ToByteArray(); //将字节数据的数据还原到对象中 IMessage IMperson = new Person(); Person p1 = new Person(); p1 = (Person)IMperson.Descriptor.Parser.ParseFrom(databytes); //输出测试 if (debug) { Debug.Log(p1.Name); Debug.Log(p1.Age); for (int i = 0; i < p1.NameList.Count; i++) { Debug.Log(p1.NameList[i]); } Debug.LogError("----------------"); } }
public void OnSendButtonClick() { string value = textInput.value; TheMsg msg = new TheMsg(); msg.Name = "我"; msg.Content = textInput.value; byte[] data = ProtobufferTool.Serialize(msg); Send(data); textInput.value = ""; }
public void StartClient(string hostIp, int hostPort) { // Connect to a remote device. try { // Establish the remote endpoint for the socket. // The name of the // remote device is "host.contoso.com". IPHostEntry ipHostInfo = Dns.GetHostEntry(hostIp); IPAddress ipAddress = ipHostInfo.AddressList[0]; IPEndPoint remoteEP = new IPEndPoint(ipAddress, hostPort); // Create a TCP/IP socket. client = new Socket(ipAddress.AddressFamily, SocketType.Stream, ProtocolType.Tcp); // Connect to the remote endpoint. client.BeginConnect(remoteEP, new AsyncCallback(ConnectCallback), client); connectDone.WaitOne(); TheMsg msg = new TheMsg(); msg.Name = "apple"; msg.Num = 1; MessageText.SetMessage("Send protocol buffer data : " + msg.ToString()); byte[] byteData; using (MemoryStream ms = new MemoryStream()) { msg.WriteTo(ms); byteData = ms.ToArray(); } // Send test data to the remote device. Send(byteData); sendDone.WaitOne(); // Receive the response from the remote device. Receive(client); receiveDone.WaitOne(); // Write the response to the console. //Console.WriteLine("Response received : {0}", response); MessageText.SetMessage("Response received : " + response); } catch (Exception e) { //Console.WriteLine(e.ToString()); MessageText.SetMessage(e.ToString()); } }
void Start() { #region Class序列化成二进制 TheMsg msg = new TheMsg(); msg.Name = "am the name"; msg.Content = "haha"; Debug.Log(string.Format("The Msg is ( Name:{0}, Num:{1} )", msg.Name, msg.Content)); byte[] bmsg; using (MemoryStream ms = new MemoryStream()) { msg.WriteTo(ms); bmsg = ms.ToArray(); } #endregion #region 二进制反序列化成Class TheMsg msg2 = TheMsg.Parser.ParseFrom(bmsg); Debug.Log(string.Format("The Msg2 is ( Name:{0}, Num:{1} )", msg2.Name, msg2.Content)); #endregion }
private void _TestProtobuff2() { //1. new a message. TheMsg message_1 = new TheMsg(); message_1.name = "steve jobs"; message_1.num = 20111005; Debug.Log("message_1: " + message_1.ToString()); string filePath = "C:\\D\\message.txt"; { //2. write byte buffer to file. ProtobufSerilize.Serialize <TheMsg>(message_1, filePath); } { //3. read content. TheMsg message_2 = ProtobufSerilize.DeSerialize <TheMsg>(filePath); Debug.Log("message_2: " + message_2.ToString()); } }
void Start() { TheMsg msg = new TheMsg(); msg.Name = "am the name"; msg.Num = 32; Debug.Log(string.Format("The Msg is ( Name:{0},Num:{1} )", msg.Name, msg.Num)); byte[] bmsg; using (MemoryStream ms = new MemoryStream()) { msg.WriteTo(ms); bmsg = ms.ToArray(); } TheMsg msg2 = TheMsg.Parser.ParseFrom(bmsg); Debug.Log(string.Format("The Msg2 is ( Name:{0},Num:{1} )", msg2.Name, msg2.Num)); }
public void OnButtonClick() { Debug.Log("OnButtonClick " + mInputField.text); // mText.text = mInputField.text; TheMsg msg = new TheMsg(); msg.Name = mInputField.text; msg.Num = 32; //Debug.Log(string.Format("The Msg is ( Name:{0},Num:{1} )", msg.Name, msg.Num)); byte[] bmsg; using (MemoryStream ms = new MemoryStream()) { msg.WriteTo(ms); bmsg = ms.ToArray(); } TheMsg msg2 = TheMsg.Parser.ParseFrom(bmsg); mText.text = msg2.Name; }
private void _TestProtobuff() { //1. new a message. TheMsg message_1 = new TheMsg(); message_1.Name = "steve jobs"; message_1.Num = 19550224; Debug.Log("message1: " + message_1.ToString()); //2. write byte buffer to file. byte[] byte_buffer; using (MemoryStream memoryStream = new MemoryStream()) { message_1.WriteTo(memoryStream); byte_buffer = memoryStream.ToArray(); } //3. read message from byte buffer. TheMsg message_2 = TheMsg.Parser.ParseFrom(byte_buffer); Debug.Log("message2: " + message_2.ToString()); }