频道直达 - 专题 - 新闻 - 技巧 - 组网 - 开发 - 安全 - web编程 - 图像 - 操作系统 - 数据库 - 教育 - 旅游 - 健康 - 时尚 - 驱动 - 软件 - 游戏 - 多媒体 - ERP - 讨论组

C#网络编程初探(4)

来源:qqread 作者: 出处:巧巧读书 2007-03-17 进入讨论组
     五.客户端的部分代码:
    由于在客户端不需要侦听网络,所以在调用上面没有程序阻塞情况,所以在下面的代码中,我们没有使用到线程,这是和服务器端程序的一个区别的地方。总结上面的这些关键步骤,可以得到一个用C#网络编程 完整的客户端程序(client.cs),具体如下:
  using System ;
  using System.Drawing ;
  using System.Collections ;
  using System.ComponentModel ;
  using System.Windows.Forms ;
  using System.Data ;
  using System.Net.Sockets ;
  using System.IO ;
  using System.Threading ;
  //导入程序中使用到的名字空间
  public class Form1 : Form
  {
  private ListBox ListBox1 ;
  private Label label1 ;
  private TextBox textBox1 ;
  private Button button3 ;
  private NetworkStream networkStream ;
  private StreamReader streamReader ;
  private StreamWriter streamWriter ;
  TcpClient myclient ;
  private Label label2 ;
  private System.ComponentModel.Container components = null ;
  public Form1 ( )
  {
  InitializeComponent ( ) ;
  }
  //清除程序中使用的各种资源
  protected override void Dispose ( bool disposing )
  {
  if ( disposing )
  {
  if ( components != null )
  {
  components.Dispose ( ) ;
  }
  }
  base.Dispose ( disposing ) ;
  }
  private void InitializeComponent ( )
  {
  label1 = new Label ( ) ;
  button3 = new Button ( ) ;
  ListBox1 = new ListBox ( ) ;
  textBox1 = new TextBox ( ) ;
  label2 = new Label ( ) ;
  SuspendLayout ( ) ;
  label1.Location = new Point ( 8 , 168 ) ;
  label1.Name = "label1" ;
  label1.Size = new Size ( 56 , 23 ) ;
  label1.TabIndex = 3 ;
  label1.Text = "信息:" ;
  //同样方法设置其他控件
  AutoScaleBaseSize = new Size ( 6 , 14 ) ;
  ClientSize = new Size ( 424 , 205 ) ;
  this.Controls.Add ( button3 ) ;
  this.Controls.Add ( textBox1 ) ;
  this.Controls.Add ( label1 ) ;
  this.Controls.Add ( label2 ) ;
  this.Controls.Add ( ListBox1 ) ;
  this.MaximizeBox = false ;
  this.MinimizeBox = false ;
  this.Name = "Form1" ;
  this.Text = "C#的网络编程客户器端!" ;
  this.Closed += new System.EventHandler ( this.Form1_Closed ) ;
  this.ResumeLayout ( false ) ;
  //连接到服务器端口,在这里是选用本地机器作为服务器,你可以通过修改IP地址来改变服务器
  try
  {
  myclient = new TcpClient ( "localhost" , 1234 ) ;
  }
  catch
  {
  MessageBox.Show ( "没有连接到服务器!" ) ;
  return ;
  }
  //创建networkStream对象通过网络套节字来接受和发送数据
  networkStream = myclient.GetStream ( ) ;
  streamReader = new StreamReader ( networkStream ) ;
  streamWriter = new StreamWriter ( networkStream ) ;
  }
  static void Main ( )
  {
  Application.Run ( new Form1 ( ) ) ;
  }
  private void button3_Click ( object sender , System.EventArgs e )
  {
  if ( textBox1.Text == "" )
  {
  MessageBox.Show ( "请确定文本框为非空!" ) ;
  textBox1.Focus ( ) ;
  return ;
  }
  try
  {
  string s ;
  //往当前的数据流中写入一行字符串
  streamWriter.WriteLine ( textBox1.Text ) ;
  //刷新当前数据流中的数据
  streamWriter.Flush ( ) ;
  //从当前数据流中读取一行字符,返回值是字符串
  s = streamReader.ReadLine ( ) ;
  ListBox1.Items.Add ( "读取服务器端发送内容:" + s ) ;
  }
  catch ( Exception ee )
  {
  MessageBox.Show ( "从服务器端读取数据出现错误,类型为:" + ee.ToString ( ) ) ;
  }
  }
  private void Form1_Closed ( object sender , System.EventArgs e )
  {
  streamReader.Close ( ) ;
  streamWriter.Close ( ) ;
  networkStream.Close ( ) ;
  }
  }
    下图是编译上面二个程序后运行的界面:
  C#网络编程初探(4)
  C#网络编程初探(4)
      图01:C#编写网络程序运行界面
    七.总结:
    虽然在.Net FrameWrok SDK 中只为网络编程提供了二个命名空间,但这二个命名空间中的内容却是十分丰富的,C#利用这二个命名空间既可以实现同步和异步,也可以实现阻塞和非阻塞。本文通过用C#编写一个网络上信息传输的程序,展现了其丰富的内容,由于篇幅所限,更深,更强大的功能还需要读者去实践、探索。

   巧巧读书:http://www.qqread.com/csharp/p303745.html

更多文章 更多内容请看网络管理实用手册网络故障手册网络组网专题专题,或进入讨论组讨论。
收藏此文】【 】【打印】【关闭
较早的文章:C#网络编程初探(3)

较新的文章:c#委托与事件心得
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
巧巧读书宗旨
相关专题
讨论组问题推荐
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
Photoshop教 程照片处理 照片制作 PS快捷键 抠图
计 算 机 故 障XP系统修复
艺 术 与 设 计设计 流媒体 设计欣赏 边框
计 算 机 安 全ARP
站内频道文章精选
巧巧电脑频道编辑信箱  告诉我们您想看的专题或文章