[STAThread] static void Main() ...{ Application.Run(new Form1()); } private void StartLisen ()//助教要作的事情 ...{ System.Net.IPAddress ip = System.Net.IPAddress.Parse ("10.0.3.4") ;// 将 IP 地址字符串转换为 System.Net.IPAddress 实例。 System.Net.IPEndPoint ipe = new System.Net.IPEndPoint (ip , 10000) ;//用指定的IP地址和端口号将网络终端端点实例化。 tl= new System.Net.Sockets.TcpListener (ipe) ;// 使用终结点ipe初始化 该侦听类的新实例 tl.Start () ; while (true) ...{ System.Net.Sockets.TcpClient tc = tl.AcceptTcpClient () ; //网络客户端tc 接受网络侦听类tl挂起的连接请求 System.Net.Sockets.NetworkStream ns = tc.GetStream () ;//返回用于发送和接受的数据流给ns byte [] buf = new byte [1024] ; int r = 0 ; while ((r = ns.Read (buf , 0 , buf.Length ))!=0) ...{ string s = System.Text.Encoding.Default.GetString (buf ) ; this.ChatHistory.AppendText (s) ; } ns.Close () ; } } private System.Threading.Thread td ; //定义td私有变量线程 private System.Net.Sockets.TcpListener tl ; //定义网络客户端侦听 tl private void OnLine_Click(object sender, System.EventArgs e) //上线 ...{ System.Threading.ThreadStart ts = new System.Threading.ThreadStart(StartLisen) ; //助教计划 ,(生成td线程的一个ts计划,传入所要触发的StartLisen事件) td = new System.Threading.Thread (ts) ; //生成助教 ---并把计划交给他 td.Start () ; System.Threading.ThreadStart ts2 = new System.Threading.ThreadStart (StartLisen2) ; td2 = new System.Threading.Thread (ts2); td2.Start () ; } private void OffLine_Click(object sender, System.EventArgs e) //下线 ...{ this.td.Abort () ; //线程实例td终止 this.tl.Stop () ; //客户端侦听tl关闭 this.td2.Abort() ; this.tl2.Stop() ; } private void Send_Click(object sender, System.EventArgs e) //发送聊天内容 ...{ System.Net.Sockets.TcpClient tc = new System.Net.Sockets.TcpClient(this.IpAdd.Text,10000) ; // 初始化客户端类的一个新实例,并将其绑定到指定的10000本地终结点。 System.Net.Sockets.NetworkStream ns = tc.GetStream (); string s = this.MyName.Text+System.Environment.NewLine+this.ChatText.Text; this.ChatHistory.AppendText(s) ; byte [] buf = System.Text.Encoding.Default.GetBytes(s) ; ns.Write (buf , 0 , buf.Length ); ns.Close () ; } private System.Threading.Thread td2 ; private System.Net.Sockets.TcpListener tl2 ; private void StartLisen2 () //监听,即可以接收对方的文件 ...{ System.Net.IPAddress ip = System.Net.IPAddress.Parse ("10.0.*.*") ;// 将 接收方的IP 地址字符串转换为 System.Net.IPAddress 实例。 System.Net.IPEndPoint ipe = new System.Net.IPEndPoint ( ip , 10001) ;//用指定的IP地址和端口号将网络终端端点实例化。 tl2= new System.Net.Sockets.TcpListener (ipe) ;// 使用终结点ipe初始化 该侦听类的新实例 tl2.Start () ; while (true) ...{ System.Net.Sockets.TcpClient tc = tl2.AcceptTcpClient () ; //网络客户端tc 接受网络侦听类tl挂起的连接请求 System.Net.Sockets.NetworkStream ns = tc.GetStream () ;//返回用于发送和接受的数据流给ns if(this.saveFileDialog1.ShowDialog() == DialogResult.OK ) ...{ string fm = this.saveFileDialog1.FileName ; System.IO.FileStream wfs = new FileStream (fm,System.IO.FileMode.Create) ; byte [] buf = new byte [1024] ; int r = 0 ; while ((r = ns.Read (buf , 0 , buf.Length ))!=0) ...{ wfs.Write(buf,0,r) ; } ns.Close () ; wfs.Close() ; } } } private void openfile_Click(object sender, System.EventArgs e) //发送文件 ...{ if(this.openFileDialog1.ShowDialog()==DialogResult.OK) ...{ string fm = this.openFileDialog1.FileName ; System.IO.FileStream rfs = new FileStream(fm,System.IO.FileMode.Open) ; System.Net.Sockets.TcpClient tc = new System.Net.Sockets.TcpClient(this.IpAdd.Text,10001) ; System.Net.Sockets.NetworkStream ns = tc.GetStream (); byte [] buf =new byte[1024]; int i ; while ((i=rfs.Read(buf,0,buf.Length)) !=0 ) ...{ ns.Write (buf , 0 , i ) ; } rfs.Close() ; ns.Close () ; } } private void sendfile_Click(object sender, System.EventArgs e) ...{ } private void ChatText_TextChanged(object sender, System.EventArgs e) ...{ }