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

27 篇文章 0 订阅
在上篇里介绍了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 );
         }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值