• 基于TCP协议的发送和接收端


       在上篇里介绍了Socket的基本编程,这次来看看.net封装的基于TCP协议的发送和接收端

    TCP协议的接收端 

    using System.Net.Sockets ; //使用到TcpListen

    using System.Threading ; //使用到线程 

    using System.IO ; //使用到StreamReader

     

             int port = 8000; //定义侦听端口号

             private Thread thThreadRead; //创建线程,用以侦听端口号,接收信息

             private TcpListener tlTcpListen; //侦听端口号

             private bool blistener = true; //设定标示位,判断侦听状态

             private NetworkStream nsStream; //创建接收的基本数据流 

             private StreamReader srRead;

             private System.Windows.Forms.StatusBar statusBar1;

             private System.Windows.Forms.Button button1;

             private System.Windows.Forms.ListBox listBox1; //从网络基础数据流中读取数据

             private TcpClient tcClient ;

     

             private void Listen ( )

             {

                  try

                  {

                       tlTcpListen = new TcpListener ( port ) ; //8000端口号来初始化TcpListener实例

                       tlTcpListen.Start ( ) ; //开始监听

                       statusBar1.Text = "正在监听..." ;

                       tcClient = tlTcpListen.AcceptTcpClient ( ) ; //通过TCP连接请求

                       nsStream = tcClient.GetStream ( ) ; //获取用以发送、接收数据的网络基础数据流

                       srRead=new StreamReader(nsStream);//以得到的网络基础数据流来初始化StreamReader实例

                       statusBar1.Text = "已经连接!";

     

                       while( blistener ) //循环侦听

                       {

                           string sMessage = srRead.ReadLine();//从网络基础数据流中读取一行数据

                           if ( sMessage == "STOP" ) //判断是否为断开TCP连接控制码

                           {

                                tlTcpListen.Stop(); //关闭侦听

                                nsStream.Close(); //释放资源

                                srRead.Close();

                                statusBar1.Text = "连接已经关闭!" ;

                                thThreadRead.Abort(); //中止线程

                                return;

                           }

     

                           string sTime = DateTime.Now.ToShortTimeString ( ) ; //获取接收数据时的时间

                           listBox1.Items.Add ( sTime + " " + sMessage ) ;

                       }

                  }

                  catch ( System.Security.SecurityException )

                  {

                       MessageBox.Show ( "侦听失败!" , "错误" ) ;

                  }

             }

             //开始监听

             private void button1_Click(object sender, System.EventArgs e)

             {

                  thThreadRead = new Thread ( new ThreadStart ( Listen ) );

                  thThreadRead.Start();//启动线程          

                  button1.Enabled=false;

             }

             // 清理所有正在使用的资源。

             protected override void Dispose( bool disposing )

             {

                  try

                  {

                       tlTcpListen.Stop(); //关闭侦听

                       nsStream.Close();

                       srRead.Close();//释放资源

                       thThreadRead.Abort();//中止线程

                  }

                  catch{}

     

                  if( disposing )

                  {

                       if (components != null)

                       {

                           components.Dispose();

                       }

                  }

                  base.Dispose( disposing );

             }

     

     

    TCP协议的发送端

     

    using System.Net.Sockets; //使用到TcpListen

    using System.Threading; //使用到线程

    using System.IO; //使用到StreamWriter

    using System.Net; //使用IPAddress类、IPHostEntry类等

     

             private StreamWriter swWriter; //用以向网络基础数据流传送数据 

             private NetworkStream nsStream; //创建发送数据的网络基础数据流 

             private TcpClient tcpClient;

             private System.Windows.Forms.Button button1;

             private System.Windows.Forms.TextBox textBox1;

             private System.Windows.Forms.Button button2;

             private System.Windows.Forms.TextBox textBox2;

             private System.Windows.Forms.StatusBar statusBar1;

             private System.Windows.Forms.Label label1;

             private System.Windows.Forms.Label label2; //通过它实现向远程主机提出TCP连接申请 

             private bool tcpConnect = false; //定义标识符,用以表示TCP连接是否建立

     

             //连接 

             private void button1_Click(object sender, System.EventArgs e)

             {

                  IPAddress ipRemote ;

                  try

                  {

                       ipRemote = IPAddress.Parse ( textBox1.Text ) ;

                  }

                  catch //判断给定的IP地址的合法性

                  {

                       MessageBox.Show ( "输入的IP地址不合法!" , "错误提示!" ) ;

                       return ;

                  }

     

                  IPHostEntry ipHost ;

                  try

                  {

                       ipHost = Dns.Resolve ( textBox1.Text ) ; 

                  }

                  catch //判断IP地址对应主机是否在线

                  {

                       MessageBox.Show ("远程主机不在线!" , "错误提示!" ) ;

                       return ;

                  }

     

                  string sHostName = ipHost.HostName ;

                  try

                  {

                       TcpClient tcpClient = new TcpClient(sHostName,8000);//对远程主机的8000端口提出TCP连接申请

                       nsStream = tcpClient.GetStream();//通过申请,并获取传送数据的网络基础数据流  

                       swWriter = new StreamWriter(nsStream);//使用获取的网络基础数据流来初始化StreamWriter实例

                       button1.Enabled = false ;

                       button2.Enabled = true ;

                       tcpConnect = true ;

                       statusBar1.Text = "已经连接!" ;

                  }

                  catch

                  {

                       MessageBox.Show ( "无法和远程主机8000端口建立连接!" , "错误提示!" ) ;

                       return ;

                  }

             }

     

              //发送

             private void button2_Click(object sender, System.EventArgs e)

             {

                  if (textBox2.Text !="")

                  {

                       swWriter.WriteLine(textBox2.Text);//刷新当前数据流中的数据

                       swWriter.Flush();

                  }

                  else

                  {

                       MessageBox.Show("发送信息不能为空!","错误提示!");

                  }

             }

             // 清理所有正在使用的资源。

             protected override void Dispose( bool disposing )

             {

                  if ( tcpConnect )

                  {

                       swWriter.WriteLine ( "STOP" ) ; //发送控制码  

                       swWriter.Flush (); //刷新当前数据流中的数据  

                       nsStream.Close (); //清除资源

                       swWriter.Close ();

                  }

                  if( disposing )

                  {

                       if (components != null)

                       {

                           components.Dispose();

                       }

                  }

                  base.Dispose( disposing );

             }


  • 相关阅读:
    C语言面试题大汇总
    cocos2d-x的win32编译环境
    完美解决Android SDK Manager无法更新
    ADT离线安装教程
    Android开发环境搭建教程
    如何利用dex2jar反编译APK
    Eclipse与Android源码中ProGuard工具的使用
    Proguard语法及常用proguard.cfg代码段
    Android之ProGuard混淆器
    Nutch源码阅读进程2---Generate
  • 原文地址:https://www.cnblogs.com/ltp/p/289669.html
Copyright © 2020-2023  润新知