点对点聊天程序

using  System;
using  System.Drawing;
using  System.Collections;
using  System.ComponentModel;
using  System.Windows.Forms;
using  System.Data;
using  System.Net;
using  System.Net.Sockets;
using  System.IO;
using  System.Threading;
using  System.Text;

namespace  点对点聊天
{
    
///   <summary>
    
///  Form1 的摘要说明。
    
///   </summary>
     public   class  Form1 : System.Windows.Forms.Form
    {
        
private  System.Windows.Forms.Label label1;
        
private  System.Windows.Forms.Button button1;
        
private  System.Windows.Forms.TextBox textBox1;
        
private  System.Windows.Forms.Label label2;
        
private  System.Windows.Forms.TextBox textBox2;
        
private  System.Windows.Forms.Label label3;
        
private  System.Windows.Forms.TextBox textBox3;
        
private  System.Windows.Forms.TextBox textBox4;
        
private  System.Windows.Forms.Button button2;
        
private  System.Windows.Forms.Label label4;
        
private  System.Windows.Forms.Button button3;
        
private  System.Windows.Forms.RichTextBox richTextBox1;
        
private  System.Windows.Forms.GroupBox groupBox1;
        
private  System.Windows.Forms.GroupBox groupBox2;
        
private  System.Windows.Forms.StatusBar statusBar1;
        
private  System.Windows.Forms.GroupBox groupBox4;
        
private  System.Windows.Forms.Label label5;
        
private  System.Windows.Forms.TextBox textBox5;
        
private  System.Windows.Forms.TextBox textBox6;
        
private  System.Windows.Forms.Label label6;
        
private  System.Windows.Forms.Button button4;
        
private  System.Windows.Forms.GroupBox groupBox3;
        
private  System.Windows.Forms.RichTextBox richTextBox2;
        
private  System.Windows.Forms.Button button5;
        
private  Thread listenthread; // 表示监听的线程
         private      string  msg;  // 要发送的消息
         private  Socket socket1;  // Socket类用于接收和发送信息        
         private  IPEndPoint lep;
        
private  System.Windows.Forms.GroupBox groupBox5;  // 请求连接的节点        
         ///   <summary>
        
///  必需的设计器变量。
        
///   </summary>
         private  System.ComponentModel.Container components  =   null ;

        
public  Form1()
        {
            
//
            
//  Windows 窗体设计器支持所必需的
            
//
            InitializeComponent();

            
//
            
//  TODO: 在 InitializeComponent 调用后添加任何构造函数代码
            
//
        }
        
///   <summary>
        
///  清理所有正在使用的资源。
        
///   </summary>
         protected   override   void  Dispose(  bool  disposing )
        {
            
if ( disposing )
            {
                
if  (components  !=   null
                {
                    components.Dispose();
                }
            }
            
base .Dispose( disposing );
        }

        
#region  Windows 窗体设计器生成的代码
        
///   <summary>
        
///  设计器支持所需的方法 - 不要使用代码编辑器修改
        
///  此方法的内容。
        
///   </summary>
         private   void  InitializeComponent()
        {
            
this .label1  =   new  System.Windows.Forms.Label();
            
this .button1  =   new  System.Windows.Forms.Button();
            
this .textBox1  =   new  System.Windows.Forms.TextBox();
            
this .label2  =   new  System.Windows.Forms.Label();
            
this .textBox2  =   new  System.Windows.Forms.TextBox();
            
this .label3  =   new  System.Windows.Forms.Label();
            
this .textBox3  =   new  System.Windows.Forms.TextBox();
            
this .textBox4  =   new  System.Windows.Forms.TextBox();
            
this .button2  =   new  System.Windows.Forms.Button();
            
this .label4  =   new  System.Windows.Forms.Label();
            
this .button3  =   new  System.Windows.Forms.Button();
            
this .richTextBox1  =   new  System.Windows.Forms.RichTextBox();
            
this .groupBox1  =   new  System.Windows.Forms.GroupBox();
            
this .textBox6  =   new  System.Windows.Forms.TextBox();
            
this .label6  =   new  System.Windows.Forms.Label();
            
this .button5  =   new  System.Windows.Forms.Button();
            
this .label5  =   new  System.Windows.Forms.Label();
            
this .textBox5  =   new  System.Windows.Forms.TextBox();
            
this .groupBox2  =   new  System.Windows.Forms.GroupBox();
            
this .statusBar1  =   new  System.Windows.Forms.StatusBar();
            
this .groupBox4  =   new  System.Windows.Forms.GroupBox();
            
this .button4  =   new  System.Windows.Forms.Button();
            
this .groupBox3  =   new  System.Windows.Forms.GroupBox();
            
this .richTextBox2  =   new  System.Windows.Forms.RichTextBox();
            
this .groupBox5  =   new  System.Windows.Forms.GroupBox();
            
this .groupBox1.SuspendLayout();
            
this .groupBox2.SuspendLayout();
            
this .groupBox4.SuspendLayout();
            
this .groupBox3.SuspendLayout();
            
this .groupBox5.SuspendLayout();
            
this .SuspendLayout();
            
//  
            
//  label1
            
//  
             this .label1.BorderStyle  =  System.Windows.Forms.BorderStyle.FixedSingle;
            
this .label1.Location  =   new  System.Drawing.Point( 8 16 );
            
this .label1.Name  =   " label1 " ;
            
this .label1.Size  =   new  System.Drawing.Size( 64 23 );
            
this .label1.TabIndex  =   0 ;
            
this .label1.Text  =   " 主机名称: " ;
            
this .label1.TextAlign  =  System.Drawing.ContentAlignment.MiddleLeft;
            
//  
            
//  button1
            
//  
             this .button1.Location  =   new  System.Drawing.Point( 80 16 );
            
this .button1.Name  =   " button1 " ;
            
this .button1.Size  =   new  System.Drawing.Size( 40 23 );
            
this .button1.TabIndex  =   1 ;
            
this .button1.Text  =   " 获取 " ;
            
this .button1.Click  +=   new  System.EventHandler( this .button1_Click);
            
//  
            
//  textBox1
            
//  
             this .textBox1.Location  =   new  System.Drawing.Point( 8 48 );
            
this .textBox1.Name  =   " textBox1 " ;
            
this .textBox1.Size  =   new  System.Drawing.Size( 112 21 );
            
this .textBox1.TabIndex  =   2 ;
            
this .textBox1.Text  =   "" ;
            
//  
            
//  label2
            
//  
             this .label2.Location  =   new  System.Drawing.Point( 8 72 );
            
this .label2.Name  =   " label2 " ;
            
this .label2.Size  =   new  System.Drawing.Size( 64 23 );
            
this .label2.TabIndex  =   0 ;
            
this .label2.Text  =   " IP地址: " ;
            
this .label2.TextAlign  =  System.Drawing.ContentAlignment.MiddleLeft;
            
//  
            
//  textBox2
            
//  
             this .textBox2.Location  =   new  System.Drawing.Point( 8 96 );
            
this .textBox2.Name  =   " textBox2 " ;
            
this .textBox2.Size  =   new  System.Drawing.Size( 112 21 );
            
this .textBox2.TabIndex  =   2 ;
            
this .textBox2.Text  =   "" ;
            
//  
            
//  label3
            
//  
             this .label3.Anchor  =  ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom  |  System.Windows.Forms.AnchorStyles.Left)));
            
this .label3.Location  =   new  System.Drawing.Point( 80 112 );
            
this .label3.Name  =   " label3 " ;
            
this .label3.Size  =   new  System.Drawing.Size( 64 23 );
            
this .label3.TabIndex  =   3 ;
            
this .label3.Text  =   " 我的妮称: " ;
            
this .label3.TextAlign  =  System.Drawing.ContentAlignment.MiddleLeft;
            
//  
            
//  textBox3
            
//  
             this .textBox3.Anchor  =  ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom  |  System.Windows.Forms.AnchorStyles.Left)));
            
this .textBox3.Location  =   new  System.Drawing.Point( 136 112 );
            
this .textBox3.Name  =   " textBox3 " ;
            
this .textBox3.Size  =   new  System.Drawing.Size( 128 21 );
            
this .textBox3.TabIndex  =   4 ;
            
this .textBox3.Text  =   "" ;
            
//  
            
//  textBox4
            
//  
             this .textBox4.Location  =   new  System.Drawing.Point( 8 48 );
            
this .textBox4.Name  =   " textBox4 " ;
            
this .textBox4.Size  =   new  System.Drawing.Size( 120 21 );
            
this .textBox4.TabIndex  =   5 ;
            
this .textBox4.Text  =   " 221.237.165.15 " ;
            
//  
            
//  button2
            
//  
             this .button2.Anchor  =  ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom  |  System.Windows.Forms.AnchorStyles.Left)));
            
this .button2.Location  =   new  System.Drawing.Point( 272 112 );
            
this .button2.Name  =   " button2 " ;
            
this .button2.Size  =   new  System.Drawing.Size( 72 23 );
            
this .button2.TabIndex  =   6 ;
            
this .button2.Text  =   " 发送 " ;
            
this .button2.Click  +=   new  System.EventHandler( this .button2_Click);
            
//  
            
//  label4
            
//  
             this .label4.BorderStyle  =  System.Windows.Forms.BorderStyle.FixedSingle;
            
this .label4.Location  =   new  System.Drawing.Point( 8 16 );
            
this .label4.Name  =   " label4 " ;
            
this .label4.Size  =   new  System.Drawing.Size( 120 23 );
            
this .label4.TabIndex  =   7 ;
            
this .label4.Text  =   " 服务器IP: " ;
            
this .label4.TextAlign  =  System.Drawing.ContentAlignment.MiddleLeft;
            
//  
            
//  button3
            
//  
             this .button3.Location  =   new  System.Drawing.Point( 8 48 );
            
this .button3.Name  =   " button3 " ;
            
this .button3.Size  =   new  System.Drawing.Size( 64 23 );
            
this .button3.TabIndex  =   8 ;
            
this .button3.Text  =   " 开始监听 " ;
            
this .button3.Click  +=   new  System.EventHandler( this .button3_Click);
            
//  
            
//  richTextBox1
            
//  
             this .richTextBox1.Anchor  =  ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top  |  System.Windows.Forms.AnchorStyles.Bottom) 
                
|  System.Windows.Forms.AnchorStyles.Left) 
                
|  System.Windows.Forms.AnchorStyles.Right)));
            
this .richTextBox1.Location  =   new  System.Drawing.Point( 8 16 );
            
this .richTextBox1.MaxLength  =   1000 ;
            
this .richTextBox1.Name  =   " richTextBox1 " ;
            
this .richTextBox1.Size  =   new  System.Drawing.Size( 336 88 );
            
this .richTextBox1.TabIndex  =   11 ;
            
this .richTextBox1.Text  =   "" ;
            
//  
            
//  groupBox1
            
//  
             this .groupBox1.Controls.Add( this .textBox6);
            
this .groupBox1.Controls.Add( this .textBox4);
            
this .groupBox1.Controls.Add( this .label4);
            
this .groupBox1.Controls.Add( this .label6);
            
this .groupBox1.Controls.Add( this .button5);
            
this .groupBox1.Location  =   new  System.Drawing.Point( 368 8 );
            
this .groupBox1.Name  =   " groupBox1 " ;
            
this .groupBox1.Size  =   new  System.Drawing.Size( 136 152 );
            
this .groupBox1.TabIndex  =   13 ;
            
this .groupBox1.TabStop  =   false ;
            
this .groupBox1.Text  =   " 连接服务器 " ;
            
//  
            
//  textBox6
            
//  
             this .textBox6.Location  =   new  System.Drawing.Point( 80 80 );
            
this .textBox6.Name  =   " textBox6 " ;
            
this .textBox6.Size  =   new  System.Drawing.Size( 48 21 );
            
this .textBox6.TabIndex  =   5 ;
            
this .textBox6.Text  =   "" ;
            
//  
            
//  label6
            
//  
             this .label6.BorderStyle  =  System.Windows.Forms.BorderStyle.FixedSingle;
            
this .label6.Location  =   new  System.Drawing.Point( 8 80 );
            
this .label6.Name  =   " label6 " ;
            
this .label6.Size  =   new  System.Drawing.Size( 64 23 );
            
this .label6.TabIndex  =   7 ;
            
this .label6.Text  =   " 目标端口: " ;
            
this .label6.TextAlign  =  System.Drawing.ContentAlignment.MiddleLeft;
            
//  
            
//  button5
            
//  
             this .button5.Location  =   new  System.Drawing.Point( 8 120 );
            
this .button5.Name  =   " button5 " ;
            
this .button5.Size  =   new  System.Drawing.Size( 64 23 );
            
this .button5.TabIndex  =   8 ;
            
this .button5.Text  =   " 请求连接 " ;
            
this .button5.Click  +=   new  System.EventHandler( this .button5_Click);
            
//  
            
//  label5
            
//  
             this .label5.BorderStyle  =  System.Windows.Forms.BorderStyle.FixedSingle;
            
this .label5.Location  =   new  System.Drawing.Point( 8 16 );
            
this .label5.Name  =   " label5 " ;
            
this .label5.Size  =   new  System.Drawing.Size( 64 23 );
            
this .label5.TabIndex  =   7 ;
            
this .label5.Text  =   " 监听端口: " ;
            
this .label5.TextAlign  =  System.Drawing.ContentAlignment.MiddleLeft;
            
//  
            
//  textBox5
            
//  
             this .textBox5.Location  =   new  System.Drawing.Point( 80 16 );
            
this .textBox5.Name  =   " textBox5 " ;
            
this .textBox5.Size  =   new  System.Drawing.Size( 48 21 );
            
this .textBox5.TabIndex  =   5 ;
            
this .textBox5.Text  =   "" ;
            
//  
            
//  groupBox2
            
//  
             this .groupBox2.Controls.Add( this .textBox1);
            
this .groupBox2.Controls.Add( this .textBox2);
            
this .groupBox2.Controls.Add( this .label1);
            
this .groupBox2.Controls.Add( this .button1);
            
this .groupBox2.Controls.Add( this .label2);
            
this .groupBox2.Location  =   new  System.Drawing.Point( 368 288 );
            
this .groupBox2.Name  =   " groupBox2 " ;
            
this .groupBox2.Size  =   new  System.Drawing.Size( 136 128 );
            
this .groupBox2.TabIndex  =   14 ;
            
this .groupBox2.TabStop  =   false ;
            
this .groupBox2.Text  =   " 本机IP " ;
            
//  
            
//  statusBar1
            
//  
             this .statusBar1.Location  =   new  System.Drawing.Point( 0 422 );
            
this .statusBar1.Name  =   " statusBar1 " ;
            
this .statusBar1.Size  =   new  System.Drawing.Size( 512 16 );
            
this .statusBar1.TabIndex  =   15 ;
            
this .statusBar1.TextChanged  +=   new  System.EventHandler( this .statusBar1_TextChanged);
            
//  
            
//  groupBox4
            
//  
             this .groupBox4.Anchor  =  ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Left  |  System.Windows.Forms.AnchorStyles.Right)));
            
this .groupBox4.Controls.Add( this .textBox3);
            
this .groupBox4.Controls.Add( this .button4);
            
this .groupBox4.Controls.Add( this .richTextBox1);
            
this .groupBox4.Controls.Add( this .label3);
            
this .groupBox4.Controls.Add( this .button2);
            
this .groupBox4.Location  =   new  System.Drawing.Point( 8 272 );
            
this .groupBox4.Name  =   " groupBox4 " ;
            
this .groupBox4.Size  =   new  System.Drawing.Size( 352 144 );
            
this .groupBox4.TabIndex  =   17 ;
            
this .groupBox4.TabStop  =   false ;
            
this .groupBox4.Text  =   " 发送窗口 " ;
            
//  
            
//  button4
            
//  
             this .button4.Anchor  =  ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Bottom  |  System.Windows.Forms.AnchorStyles.Left)));
            
this .button4.Location  =   new  System.Drawing.Point( 8 112 );
            
this .button4.Name  =   " button4 " ;
            
this .button4.Size  =   new  System.Drawing.Size( 64 23 );
            
this .button4.TabIndex  =   12 ;
            
this .button4.Text  =   " 清空消息 " ;
            
this .button4.Click  +=   new  System.EventHandler( this .button4_Click);
            
//  
            
//  groupBox3
            
//  
             this .groupBox3.Anchor  =  ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top  |  System.Windows.Forms.AnchorStyles.Left) 
                
|  System.Windows.Forms.AnchorStyles.Right)));
            
this .groupBox3.Controls.Add( this .richTextBox2);
            
this .groupBox3.Location  =   new  System.Drawing.Point( 8 8 );
            
this .groupBox3.Name  =   " groupBox3 " ;
            
this .groupBox3.Size  =   new  System.Drawing.Size( 352 264 );
            
this .groupBox3.TabIndex  =   18 ;
            
this .groupBox3.TabStop  =   false ;
            
this .groupBox3.Text  =   " 聊天记录 " ;
            
//  
            
//  richTextBox2
            
//  
             this .richTextBox2.Anchor  =  ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top  |  System.Windows.Forms.AnchorStyles.Bottom) 
                
|  System.Windows.Forms.AnchorStyles.Left) 
                
|  System.Windows.Forms.AnchorStyles.Right)));
            
this .richTextBox2.Location  =   new  System.Drawing.Point( 8 16 );
            
this .richTextBox2.Name  =   " richTextBox2 " ;
            
this .richTextBox2.Size  =   new  System.Drawing.Size( 336 240 );
            
this .richTextBox2.TabIndex  =   0 ;
            
this .richTextBox2.Text  =   "" ;
            
//  
            
//  groupBox5
            
//  
             this .groupBox5.Controls.Add( this .label5);
            
this .groupBox5.Controls.Add( this .textBox5);
            
this .groupBox5.Controls.Add( this .button3);
            
this .groupBox5.Location  =   new  System.Drawing.Point( 368 184 );
            
this .groupBox5.Name  =   " groupBox5 " ;
            
this .groupBox5.Size  =   new  System.Drawing.Size( 136 80 );
            
this .groupBox5.TabIndex  =   19 ;
            
this .groupBox5.TabStop  =   false ;
            
this .groupBox5.Text  =   " 监听设置 " ;
            
//  
            
//  Form1
            
//  
             this .AutoScaleBaseSize  =   new  System.Drawing.Size( 6 14 );
            
this .ClientSize  =   new  System.Drawing.Size( 512 438 );
            
this .Controls.Add( this .groupBox5);
            
this .Controls.Add( this .groupBox3);
            
this .Controls.Add( this .groupBox4);
            
this .Controls.Add( this .statusBar1);
            
this .Controls.Add( this .groupBox1);
            
this .Controls.Add( this .groupBox2);
            
this .MaximumSize  =   new  System.Drawing.Size( 520 472 );
            
this .MinimumSize  =   new  System.Drawing.Size( 520 472 );
            
this .Name  =   " Form1 " ;
            
this .Text  =   " 点对点聊天 " ;
            
this .Closing  +=   new  System.ComponentModel.CancelEventHandler( this .Form1_Closing);
            
this .groupBox1.ResumeLayout( false );
            
this .groupBox2.ResumeLayout( false );
            
this .groupBox4.ResumeLayout( false );
            
this .groupBox3.ResumeLayout( false );
            
this .groupBox5.ResumeLayout( false );
            
this .ResumeLayout( false );

        }
        
#endregion

        
///   <summary>
        
///  应用程序的主入口点。
        
///   </summary>
        [STAThread]
        
static   void  Main() 
        {
            Application.Run(
new  Form1());
        }

        
private   void  listenstart() // 监听发入的信息
        {
            
try
            {
                
while ( this .socket1.Connected)
                {                    
                    
// 设置一个缓冲区
                    Byte[] stream = new  Byte[ 1024 ];
                    socket1.Receive(stream);
                    
// 将获得的流转化为字符串类型
                     string  message = Encoding.Default.GetString(stream);
                    
// this.textBox1.Text=socket1.Available.ToString();
                     this .richTextBox2.AppendText(message);
                    
this .richTextBox2.AppendText( " " );
                }                
            }
            
catch // (Exception error)
            {
                
if ( ! this .socket1.Connected)
                {
                    socket1.Close();
                    button3.Enabled
= true ;
                    button5.Enabled
= true ;
                }            
            }
        }
        
private   void  button1_Click( object  sender, System.EventArgs e)
        {
            
// 获取本地主机名称
             string  host = Dns.GetHostName();
            
this .textBox1.Text = host;
            
            
// 获取本机IP
            IPAddress[] addrs  =  Dns.Resolve( " localhost " ).AddressList;
            IPAddress addr 
=  Dns.Resolve(host).AddressList[ 0 ];
            
// 转化为标准的以点分隔的四部分格式
             this .textBox2.Text = addr.ToString();
        }

        
private   void  button3_Click( object  sender, System.EventArgs e)
        {
            
// 获得监听端口
             int  hostport;
            
try
            {                    
                hostport
= Int32.Parse( this .textBox5.Text);
                
if (hostport < 135 || hostport > 65400 )hostport = 12800 ;
            }
            
catch
            {
                hostport
= 12800 ;
            }                
            
// IPAddress ipAddress = Dns.Resolve("localhost").AddressList[0];
            IPAddress ipAddress = IPAddress.Parse( " 0.0.0.0 " );    
            lep 
=   new  IPEndPoint(ipAddress,hostport);
            socket1
= new  Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            
try
            {
                socket1.Bind(lep);
                socket1.Listen(
10000 );
                
this .statusBar1.Text = " 等待连接... " ;
                button3.Enabled
= false ;
                button5.Enabled
= false ;
                Thread watt
= new  Thread( new  ThreadStart(waits));
                watt.Start();
                
            }
            
catch
            {
                button3.Enabled
= true ;
            }
            
        }
        
private   void  waits()
        {
            
try
            {
                socket1
= socket1.Accept();
                
this .statusBar1.Text = " 已建立连接 " ;
                listenthread
= new  Thread( new  ThreadStart(listenstart));
                listenthread.Start();
                button3.Enabled
= false ;
                button5.Enabled
= false ;
            }
            
catch
            {
                button3.Enabled
= true ;
                button5.Enabled
= true ;
            }

        }

        
private   void  statusBar1_TextChanged( object  sender, System.EventArgs e)
        {
            
        }

        
private   void  button2_Click( object  sender, System.EventArgs e)
        {
            
if (socket1.Connected)
            {
                
// 将发送的字符串转换成字节数组
                msg  =   " < " + this .textBox3.Text + " > " + this .richTextBox1.Text;
                Byte[] bytes
= Encoding.Default.GetBytes(msg);
                
// 发送数组
                 try
                {
                    socket1.Send(bytes,bytes.Length,SocketFlags.None);
                    
this .richTextBox1.Text = "" ;
                }
                
catch
                {
                }                
                
// this.richTextBox2.AppendText(msg);
            }
        }

        

        
private   void  button4_Click( object  sender, System.EventArgs e)
        {
            
this .richTextBox2.Text = "" ;            
        }

        
private   void  button5_Click( object  sender, System.EventArgs e)
        {
            
// 获得连接端口
             int  hostport;
            
try
            {                    
                hostport
= Int32.Parse( this .textBox6.Text);
                
if (hostport < 135 || hostport > 65400 )hostport = 12800 ;
            }
            
catch
            {
                hostport
= 30000 ;
            }
            
            
try
            {
                
// 得到需连接的地址
                lep  =   new  IPEndPoint(IPAddress.Parse( this .textBox4.Text),hostport);                    
            }
            
catch (Exception err)
            {
                MessageBox.Show(err.Message);
            }
            
// 构造socket1实例,并请求连接
            socket1 =   new  Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
            
try
            {
                socket1.Connect(lep);
                
if (socket1.Connected) this .statusBar1.Text = " 连接成功 " ;
                
// 开始监听
                listenthread = new  Thread( new  ThreadStart(listenstart));
                listenthread.Start();
                button5.Enabled
= false ;
                button3.Enabled
= false ;
            }
            
catch
            {
                button5.Enabled
= true ;
                button3.Enabled
= true ;
            }
        }

        
private   void  Form1_Closing( object  sender, System.ComponentModel.CancelEventArgs e)
        {            
            
try
            {
                socket1.Close();
                
if  ( this .listenthread != null )
                {
                    
// 如果线程还处于运行状态就关闭它
                     if  ( this .listenthread.ThreadState == ThreadState.Running)
                    {
                        
this .listenthread.Abort();
                    }
                }
            }
            
catch
            {
            }

        }

        
    }
}
 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
SQLAlchemy 是一个 SQL 工具包和对象关系映射(ORM)库,用于 Python 编程语言。它提供了一个高级的 SQL 工具和对象关系映射工具,允许开发者以 Python 类和对象的形式操作数据库,而无需编写大量的 SQL 语句。SQLAlchemy 建立在 DBAPI 之上,支持多种数据库后端,如 SQLite, MySQL, PostgreSQL 等。 SQLAlchemy 的核心功能: 对象关系映射(ORM): SQLAlchemy 允许开发者使用 Python 类来表示数据库表,使用类的实例表示表中的行。 开发者可以定义类之间的关系(如一对多、多对多),SQLAlchemy 会自动处理这些关系在数据库中的映射。 通过 ORM,开发者可以像操作 Python 对象一样操作数据库,这大大简化了数据库操作的复杂性。 表达式语言: SQLAlchemy 提供了一个丰富的 SQL 表达式语言,允许开发者以 Python 表达式的方式编写复杂的 SQL 查询。 表达式语言提供了对 SQL 语句的灵活控制,同时保持了代码的可读性和可维护性。 数据库引擎和连接池: SQLAlchemy 支持多种数据库后端,并且为每种后端提供了对应的数据库引擎。 它还提供了连接池管理功能,以优化数据库连接的创建、使用和释放。 会话管理: SQLAlchemy 使用会话(Session)来管理对象的持久化状态。 会话提供了一个工作单元(unit of work)和身份映射(identity map)的概念,使得对象的状态管理和查询更加高效。 事件系统: SQLAlchemy 提供了一个事件系统,允许开发者在 ORM 的各个生命周期阶段插入自定义的钩子函数。 这使得开发者可以在对象加载、修改、删除等操作时执行额外的逻辑。
GeoPandas是一个开源的Python库,旨在简化地理空间数据的处理和分析。它结合了Pandas和Shapely的能力,为Python用户提供了一个强大而灵活的工具来处理地理空间数据。以下是关于GeoPandas的详细介绍: 一、GeoPandas的基本概念 1. 定义 GeoPandas是建立在Pandas和Shapely之上的一个Python库,用于处理和分析地理空间数据。 它扩展了Pandas的DataFrame和Series数据结构,允许在其中存储和操作地理空间几何图形。 2. 核心数据结构 GeoDataFrame:GeoPandas的核心数据结构,是Pandas DataFrame的扩展。它包含一个或多个列,其中至少一列是几何列(geometry column),用于存储地理空间几何图形(如点、线、多边形等)。 GeoSeries:GeoPandas中的另一个重要数据结构,类似于Pandas的Series,但用于存储几何图形序列。 二、GeoPandas的功能特性 1. 读取和写入多种地理空间数据格式 GeoPandas支持读取和写入多种常见的地理空间数据格式,包括Shapefile、GeoJSON、PostGIS、KML等。这使得用户可以轻松地从各种数据源中加载地理空间数据,并将处理后的数据保存为所需的格式。 2. 地理空间几何图形的创建、编辑和分析 GeoPandas允许用户创建、编辑和分析地理空间几何图形,包括点、线、多边形等。它提供了丰富的空间操作函数,如缓冲区分析、交集、并集、差集等,使得用户可以方便地进行地理空间数据分析。 3. 数据可视化 GeoPandas内置了数据可视化功能,可以绘制地理空间数据的地图。用户可以使用matplotlib等库来进一步定制地图的样式和布局。 4. 空间连接和空间索引 GeoPandas支持空间连接操作,可以将两个GeoDataFrame按照空间关系(如相交、包含等)进行连接。此外,它还支持空间索引,可以提高地理空间数据查询的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值