日期:2014-05-18  浏览次数:20919 次

请教高手 c#中服务器接收数据,socket如何接收一个struct?!!!
我在自己写一个socket程序的时候,客户端将一个struct打包放入buffer里面发送给服务器,
服务器已经与其建立连接,现在要接收这个struct,自动存入数据库,不知道怎么写接收struct的代码,
就是在下面这段代码最后就不知道怎么接着写下去了。我之前搜索了网上说序列化,可是还是不太明白究竟是怎么回事,忘高手赐教,不胜感激,最好能附上代码。
  这是结构体定义:
  struct struct1
  {
  char[] time;
  char[] addr;
  char[] level;
  char[] type;
  };
这是我写的收数据的代码:
 protected void Button1_Click(object sender, EventArgs e)
  {
  try
  {
  myip = IPAddress.Parse(TextBox1.Text);
  }
  catch { Label3.Text = "您输入的IP格式不正确,请从新输入!"; }
  try
  {
  myserver = new IPEndPoint(myip, Int32.Parse(TextBox2.Text));

  //构造套接字
  sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

  //绑定端口
  sock.Bind(myserver);

  //监听开始
  sock.Listen(100);      //挂起队列的最大长度
  Label3.Text = "主机" + TextBox1.Text + "端口" + TextBox2.Text + "开始监听";
  Socket aaa = sock.Accept();
  //构造线程
  thread = new Thread(new ThreadStart(targett));

  //启动线程用于接收连接和接收数据

  thread.Start();
  }

  catch (Exception ee) { Label3.Text = ee.Message; }
  }
  protected void Button2_Click(object sender, EventArgs e)
  {
  try
  {
  sock.Close();
  Label3.Text = "主机" + TextBox1.Text + "端口" + TextBox2.Text + "停止监听";
  }
  catch { }
  }
  private void targett()
  {
  //接受连接请求
  aaa = sock.Accept();
  bb = false;

  //如果连接
  if (aaa.Connected)
  {
  Label3.Text = "与客户建立连接.";

  //构造字节数组
  Byte[] bytee = new Byte[64];
  //为字节数组赋值
  bytee = System.Text.Encoding.BigEndianUnicode.GetBytes("可以向服务器发送数据!".ToCharArray());
  //向客户端发送信息
  aaa.Send(bytee, bytee.Length, 0);

  //如果是true,循环接收信息
  while (!bb)
  {
  struct1 receive = new struct1();
  struct1
  Byte[] bbb = new Byte[64];
  //接收数据
   
   

  }
  }
  }


------解决方案--------------------
序列化简单点将就是将对象编码为流的方

将对象序列化后就是一个流

把流通过网络传输后在服务器或客户端进行反序列化为相应类型的对象就可以了
------解决方案--------------------
private byte[] SerialObject(object obj)
{
// try
// {
MemoryStream ms = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(ms, obj);
return ms.ToArray();
//}
//catch
// {
// return null;
// }

}
 public object Deserialize(byte[] obj)
{
MemoryStream ms = new MemoryStream();
object DeserialObj;
DeserialObj = null;<