如何使一个对象转换成byte[]类型,通过SOCKET传送!
通过SOCKET传送数据还有其他办法么?

解决方案 »

  1.   

    如果對象是變量可以用Convert來做,如果是類,就要用序列化來做了。
      

  2.   

    下面是用UDP发送
    Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
                IPAddress broadcast = IPAddress.Parse("192.168.200.255");
                IPEndPoint ep = new IPEndPoint(broadcast, 11000);
                byte[] sendbuf = Encoding.Default.GetBytes(发送的字符串);
                s.SendTo(sendbuf, ep);
                s.Close();
      

  3.   

    hehe 那大伙传消息的时候都怎么传啊,不会直接传字符串吧,那也太不好看了
      

  4.   

    using System;
    using System.IO;
    using System.Collections;
    using System.Runtime.Serialization.Formatters.Binary;
    using System.Runtime.Serialization;public class App 
    {
        [STAThread]
        static void Main() 
        {
            Serialize();
            Deserialize();
        }    static void Serialize() 
        {
            // Create a hashtable of values that will eventually be serialized.
            Hashtable addresses = new Hashtable();
            addresses.Add("Jeff", "123 Main Street, Redmond, WA 98052");
            addresses.Add("Fred", "987 Pine Road, Phila., PA 19116");
            addresses.Add("Mary", "PO Box 112233, Palo Alto, CA 94301");        // To serialize the hashtable and its key/value pairs,  
            // you must first open a stream for writing. 
            // In this case, use a file stream.
            FileStream fs = new FileStream("DataFile.dat", FileMode.Create);        // Construct a BinaryFormatter and use it to serialize the data to the stream.
            BinaryFormatter formatter = new BinaryFormatter();
            try 
            {
                formatter.Serialize(fs, addresses);
            }
            catch (SerializationException e) 
            {
                Console.WriteLine("Failed to serialize. Reason: " + e.Message);
                throw;
            }
            finally 
            {
                fs.Close();
            }
        }   
        static void Deserialize() 
        {
            // Declare the hashtable reference.
            Hashtable addresses  = null;        // Open the file containing the data that you want to deserialize.
            FileStream fs = new FileStream("DataFile.dat", FileMode.Open);
            try 
            {
                BinaryFormatter formatter = new BinaryFormatter();            // Deserialize the hashtable from the file and 
                // assign the reference to the local variable.
                addresses = (Hashtable) formatter.Deserialize(fs);
            }
            catch (SerializationException e) 
            {
                Console.WriteLine("Failed to deserialize. Reason: " + e.Message);
                throw;
            }
            finally 
            {
                fs.Close();
            }        // To prove that the table deserialized correctly, 
            // display the key/value pairs.
            foreach (DictionaryEntry de in addresses) 
            {
                Console.WriteLine("{0} lives at {1}.", de.Key, de.Value);
            }
        }
    }
      

  5.   

    有更简单的方法
    byte[] sendb=new byte[100];
    自己写每一个字节  呵呵
    不过不提倡这种方法推荐下面的方法
    1、struct转换为byte[]
    static   byte[]   StructToBytes(object   structObj)   
      {   
      int   size   =     Marshal.SizeOf(structObj);   
      IntPtr   buffer   =   Marshal.AllocHGlobal(size);   
      try   
      {   
      Marshal.StructureToPtr(structObj,   buffer,   false);   
      byte[]   bytes   =   new   byte[size];   
      Marshal.Copy(buffer,   bytes,   0,   size);   
      return   bytes;   
      }   
      finally   
      {   
      Marshal.FreeHGlobal(buffer);   
      }    
      }