Tuesday, February 23, 2010

Talking with the professor from VT

1. If you treat your student like professionals, they will act like professionals. If you treat your student like kids, they will act like kids.
 
2. Some faculties have MIT addiction. No matter what MIT did, they want to make a copy or re-implement it. I do not think it is a right direction. No matter how good you did, you will always be the second. If you are the second, how could you get grant? You should find an area which you can lead them.

Saturday, February 20, 2010

[C#]利用Socket送傳class or struct序列化資料

一般利用Sockert都傳送文字字串.

那如果要傳送class or struct的資料怎麼辦呢.

重點就是先將class or struct序列化.

直接看範例吧.

共用Class or Struct

person.cs

01 using System;
02 using System.Collections.Generic;
03 using System.Text;
04  
05 namespace ClassLibrary2
06 {
07     [Serializable]
08     public class class_person
09     {
10         public string id;
11         public string name;
12     }
13  
14     [Serializable]
15     public struct struct_person
16     {
17         public string id;
18         public string name;
19     }
20 }

Client端,要using共用的dll

Form1.cs

01 using System;
02 using System.Collections.Generic;
03 using System.ComponentModel;
04 using System.Data;
05 using System.Drawing;
06 using System.Text;
07 using System.Windows.Forms;
08 using System.Net.Sockets;
09 using System.Net;
10 using System.Threading;
11 using ClassLibrary2;
12 using System.Runtime.Serialization.Formatters.Binary;
13 using System.IO;
14  
15 namespace WindowsApplication5
16 {
17     public partial class Form1 : Form
18     {
19         public Form1()
20         {
21             InitializeComponent();
22         }
23  
24         private void btnSendClassData_Click(object sender, EventArgs e)
25         {
26             try
27             {
28                 IPEndPoint hostEP = new IPEndPoint(IPAddress.Parse(this.tbIp.Text), int.Parse(this.tbPort.Text));
29                 Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
30                 socket.Connect(hostEP);
31                 byte[] bytesSend = new byte[1024];
32  
33                 //序列化
34                 BinaryFormatter bf = new BinaryFormatter();
35                 MemoryStream stream = new MemoryStream();
36                 class_person person = new class_person();
37                 person.id = this.tbId.Text;
38                 person.name = this.tbName.Text;
39                 bf.Serialize(stream, person);
40  
41                 bytesSend = stream.ToArray();
42                 socket.SendTo(bytesSend, 0, hostEP);
43                 socket.Shutdown(SocketShutdown.Both);
44                 socket.Close();
45             }
46             catch (Exception ex)
47             {
48                 MessageBox.Show(ex.ToString());
49             }
50         }
51     }
52 }


Server端,要using共用的dll

Form1.cs

001 using System;
002 using System.Collections.Generic;
003 using System.ComponentModel;
004 using System.Data;
005 using System.Drawing;
006 using System.Text;
007 using System.Windows.Forms;
008 using System.Net.Sockets;
009 using System.Net;
010 using System.Threading;
011 using ClassLibrary2;
012 using System.Runtime.Serialization.Formatters.Binary;
013 using System.IO;
014  
015 namespace WindowsApplication4
016 {
017     public partial class Form1 : Form
018     {
019         delegate void SetTextCallback(byte[] data);
020         delegate void GetTextCallback();
021  
022         Thread startThread;
023         Socket socket;
024  
025         public Form1()
026         {
027             InitializeComponent();
028         }
029  
030         private void btnOpenListen_Click(object sender, EventArgs e)
031         {
032             startThread = new Thread(new ParameterizedThreadStart(start));
033             startThread.Start();
034             this.btnOpenListen.Enabled = false;
035             this.btnCloseListen.Enabled = true;
036         }
037  
038         private void btnCloseListen_Click(object sender, EventArgs e)
039         {
040             socket.Close();
041             startThread.Abort();
042             this.btnOpenListen.Enabled =