• c# socket传输struct类型


     data结构体类型

        public struct datas
        {

            public string test1;

            public string test2;
        }

    //socket服务器端

    public void SocketServer()
            {
                Socket listener = new Socket(AddressFamily.InterNetwork,
                                             SocketType.Stream,
                                             ProtocolType.Tcp);
                listener.Bind(new IPEndPoint(getLocalmachineIPAddress(), 2323));
                listener.Listen(10);

                while (true)
                {
                    Socket socket = listener.Accept();
                    string receivedValue = string.Empty;

                    while (true)
                    {
                        byte[] receivedBytes = new byte[1024];
                        int numBytes = socket.Receive(receivedBytes);
                        Console.WriteLine("Receiving .");
                        receivedValue += Encoding.ASCII.GetString(receivedBytes,
                                          0, numBytes);
                        if (receivedValue.IndexOf("[FINAL]") > -1)
                        {
                            break;
                        }
                    }

                    byte[] buffer = new byte[1024000];
                    if (receivedValue.Contains("get gateway rooms"))
                    {
                        MemoryStream mStream = new MemoryStream();
                        BinaryFormatter bf = new BinaryFormatter();
                        datas sendData;
                        sendData.m_DictRooms = FormMain.DictRooms;
                        sendData.m_DictRoomNameText = FormMain.DictRoomNameText;
                        bf.Serialize(mStream, sendData);
                        mStream.Flush();
                        mStream.Position = 0;
                        mStream.Read(buffer, 0, buffer.Length);
                    }
                    //string replyValue = "Message successfully received.";
                    //byte[] replyMessage = Encoding.ASCII.GetBytes(replyValue);
                    socket.Send(buffer);
                    socket.Shutdown(SocketShutdown.Both);
                    socket.Close();
                }
                listener.Close();
            }

    //socket客户端

            private void socketClient(object sender, EventArgs e)
            {
                if (comboBoxGateway.SelectedItem != null)
                {
                    byte[] receivedBytes = new byte[1024000];
                    IPHostEntry ipHost = Dns.Resolve(comboBoxGateway.SelectedItem.ToString());
                    IPAddress ipAddress = ipHost.AddressList[0];
                    IPEndPoint ipEndPoint = new IPEndPoint(ipAddress, 2323);

                    Socket sk = new Socket(AddressFamily.InterNetwork,
                                                 SocketType.Stream,
                                                 ProtocolType.Tcp);
                    sk.Connect(ipEndPoint);
                    string sendingMessage = "get gateway rooms";
                    byte[] forwardMessage = Encoding.ASCII.GetBytes(sendingMessage
                       + "[FINAL]");
                    sk.Send(forwardMessage);
                    int totalBytesReceived = sk.Receive(receivedBytes);
                    MemoryStream mStream = new MemoryStream();
                    //ReceiveDatas = bf.Deserialize(receivedBytes,mStream );
                    mStream.Write(receivedBytes, 0, receivedBytes.Length);
                    mStream.Flush();
                    mStream.Position = 0;
                    BinaryFormatter bf = new BinaryFormatter();
                    if (mStream.Capacity > 0)
                    {
                       datas receiveDatas = (datas)bf.Deserialize(mStream);
                    }
                    sk.Shutdown(SocketShutdown.Both);
                    sk.Close();

                    //加载新选择的网关房间
                    InitializeSelectRoomsTab();
                }
            }

  • 相关阅读:
    天下没有不会这么回事!不会就学——北漂18年(28)
    Python Module_sys/random
    Python Module_sys/random
    redis 主从切换
    第一章 数据引用与匿名存储
    第12章 对象上
    zabbix 发送邮件配置
    第10章 包 名字空间,变量和函数
    perl 类 对象 方法
    perl数据结构输出 Data::Dumper
  • 原文地址:https://www.cnblogs.com/tianmochou/p/4921069.html
Copyright © 2020-2023  润新知