欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    2022年C#网络编程初探 .pdf

    • 资源ID:27250746       资源大小:266.33KB        全文页数:16页
    • 资源格式: PDF        下载积分:4.3金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要4.3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    2022年C#网络编程初探 .pdf

    我们知道 C和 C的差异之一,就是他本身没有类库,所使用的类库是.Net 框架中的类库-.Net FrameWork SDK 。在 .Net FrameWork SDK 中为网络编程提供了二个名称空间:System.Net 和System.Net.Sockets 。 C就是通过这二个名称空间中封装的类和方法实现网络通讯的。首先我们解释一下在网络编程时候,经常遇到的几个概念:同步(synchronous)、异步( asynchronous)、阻塞( Block )和非阻塞(Unblock ):所谓同步方式, 就是发送方发送数据包以后,不等接受方响应,就接着发送下一个数据包。异步方式就是当发送方发送一个数据包以后,一直等到接受方响应后,才接着发送下一个数据包。 而阻塞套接字是指执行此套接字的网络调用时,直到调用成功才返回,否则此套节字就一直阻塞在网络调用上,比如调用StreamReader 类的 Readlin ( )方法读取网络缓冲区中的数据,如果调用的时候没有数据到达,那么此Readlin ( ) 方法将一直挂在调用上,直到读到一些数据, 此函数调用才返回;而非阻塞套接字是指在执行此套接字的网络调用时,不管是否执行成功,都立即返回。 同样调用StreamReader 类的 Readlin ( )方法读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。在Windows 网络通信软件开发中, 最为常用的方法就是异步非阻塞套接字。平常所说的C/S (客户端 /服务器)结构的软件采用的方式就是异步非阻塞模式的。其实在用 C进行网络编程中,我们并不需要了解什么同步、异步、 阻塞和非阻塞的原理和工作机制,因为在.Net FrameWrok SDK 中已经已经把这些机制给封装好了。下面我们就用 C开一个具体的网络程序来说明一下问题。一本文中介绍的程序设计及运行环境(1) .微软视窗2000 服务器版(2) .Net Framework SDK Beta 2以上版本名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 16 页 - - - - - - - - - 二服务器端程序设计的关键步骤以及解决办法:在下面接受的程序中,我们采用的是异步阻塞的方式。(1).首先要要在给定的端口上面创建一个tcpListener 对象侦听网络上面的请求。当接收到连结请求后通过调用tcpListener 对象的 AcceptSocket 方法产生一个用于处理接入连接请求的Socket 的实例。下面是具体实现代码:/ 创建一个 tcpListener对象,此对象主要是对给定端口进行侦听tcpListener = new TcpListener ( 1234 ) ; / 开始侦听tcpListener.Start ( ) ; / 返回可以用以处理连接的Socket 实例socketForClient = tcpListener.AcceptSocket ( ) ; (2).接受和发送客户端数据:此时 Socket 实例已经产生,如果网络上有请求,在请求通过以后,Socket 实例构造一个NetworkStream 对象, NetworkStream 对象为网络访问提供了基础数据流。我们通过名称空间 System.IO 中封装的二个类StreamReader和StreamWriter 来实现对NetworkStream 对象的访问。其中StreamReader类中的 ReadLine ( )方法就是从NetworkStream 对象中读取一行字符;StreamWriter 类中的 WriteLine ( ) 方法就是对NetworkStream 对象中写入一行字符串。从而实现在网络上面传输字符串,下面是具体的实现代码:try / 如果返回值是 true,则产生的套节字已经接受来自远方的连接请求名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 16 页 - - - - - - - - - if ( socketForClient.Connected ) ListBox1.Items.Add ( 已经和客户端成功连接! ) ; while ( true ) / 创建 networkStream对象通过网络套节字来接受和发送数据networkStream = new NetworkStream ( socketForClient ) ; / 从当前数据流中读取一行字符,返回值是字符串streamReader = new StreamReader ( networkStream ) ; string msg = streamReader.ReadLine ( ) ; ListBox1.Items.Add ( 收到客户端信息: + msg ) ; streamWriter = new StreamWriter ( networkStream ) ; if ( textBox1.Text != ) ListBox1.Items.Add ( 往客户端反馈信息: + textBox1.Text ) ; / 往当前的数据流中写入一行字符串streamWriter.WriteLine ( textBox1.Text ) ; / 刷新当前数据流中的数据streamWriter.Flush ( ) ; catch ( Exception ey ) MessageBox.Show ( ey.ToString ( ) ) ; (3).最后别忘了要关闭所以流,停止侦听网络,关闭套节字,具体如下:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 16 页 - - - - - - - - - / 关闭线程和流networkStream.Close ( ) ; streamReader.Close ( ) ; streamWriter.Close ( ) ; _thread1.Abort ( ) ; tcpListener.Stop ( ) ; socketForClient.Shutdown ( SocketShutdown.Both ) ; socketForClient.Close ( ) ; 三 C网络编程服务器端程序的部分源代码(server.cs):由于在此次程序中我们采用的结构是异步阻塞方式,所以在实际的程序中,为了不影响服务器端程序的运行速度,我们在程序中设计了一个线程,使得对网络请求侦听,接受和发送数据都在线程中处理,请在下面的代码中注意这一点,下面是server.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 ; using System.Net ; / 导入程序中使用到的名字空间public class Form1 : Form private ListBox ListBox1 ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 16 页 - - - - - - - - - private Button button2 ; private Label label1 ; private TextBox textBox1 ; private Button button1 ; private Socket socketForClient ; private NetworkStream networkStream ; private TcpListener tcpListener ; private StreamWriter streamWriter ; private StreamReader streamReader ; private Thread _thread1 ; 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 ( ) 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 16 页 - - - - - - - - - label1 = new Label ( ) ; button2 = new Button ( ) ; button1 = new Button ( ) ; ListBox1 = new ListBox ( ) ; textBox1 = new TextBox ( ) ; SuspendLayout ( ) ; label1.Location = new Point ( 8 , 168 ) ; label1.Name = label1 ; label1.Size = new Size ( 120 , 23 ) ; label1.TabIndex = 3 ; label1.Text = 往客户端反馈信息: ; / 同样的方式设置其他控件, 这里略去this.Controls.Add ( button1 ) ; this.Controls.Add ( textBox1 ) ; this.Controls.Add ( label1 ) ; this.Controls.Add ( button2 ) ; 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 ) ; private void Listen ( ) / 创建一个 tcpListener对象,此对象主要是对给定端口进行侦听名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 16 页 - - - - - - - - - tcpListener = new TcpListener ( 1234 ) ; / 开始侦听tcpListener.Start ( ) ; / 返回可以用以处理连接的Socket 实例socketForClient = tcpListener.AcceptSocket ( ) ; try / 如果返回值是 true,则产生的套节字已经接受来自远方的连接请求if ( socketForClient.Connected ) ListBox1.Items.Add ( 已经和客户端成功连接! ) ; while ( true ) / 创建 networkStream对象通过网络套节字来接受和发送数据networkStream = new NetworkStream ( socketForClient ) ; / 从当前数据流中读取一行字符,返回值是字符串streamReader = new StreamReader ( networkStream ) ; string msg = streamReader.ReadLine ( ) ; ListBox1.Items.Add ( 收到客户端信息: + msg ) ; streamWriter = new StreamWriter ( networkStream ) ; if ( textBox1.Text != ) ListBox1.Items.Add ( 往客户端反馈信息: + textBox1.Text ) ; / 往当前的数据流中写入一行字符串streamWriter.WriteLine ( textBox1.Text ) ; / 刷新当前数据流中的数据streamWriter.Flush ( ) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 16 页 - - - - - - - - - catch ( Exception ey ) MessageBox.Show ( ey.ToString ( ) ) ; static void Main ( ) Application.Run ( new Form1 ( ) ) ; private void button1_Click ( object sender , System.EventArgs e ) ListBox1.Items .Add ( 服务已经启动! ) ; _thread1 = new Thread ( new ThreadStart ( Listen ) ) ; _thread1.Start ( ) ; private void button2_Click ( object sender , System.EventArgs e ) / 关闭线程和流networkStream.Close ( ) ; streamReader.Close ( ) ; streamWriter.Close ( ) ; _thread1.Abort ( ) ; tcpListener.Stop ( ) ; socketForClient.Shutdown ( SocketShutdown.Both ) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 16 页 - - - - - - - - - socketForClient.Close ( ) ; private void Form1_Closed ( object sender , System.EventArgs e ) / 关闭线程和流networkStream.Close ( ) ; streamReader.Close ( ) ; streamWriter.Close ( ) ; _thread1.Abort ( ) ; tcpListener.Stop ( ) ; socketForClient.Shutdown ( SocketShutdown.Both ) ; socketForClient.Close ( ) ; 四客户端程序设计的关键步骤以及解决办法:(1).连接到服务器端的指定端口:我们采用的本地机既做服务器也做客户机,你可以通过修改IP 地址来确定自己想要连接的服务器。 我们在连接的时候采用了TcpClient 类,此类是在较高的抽象级别(高于 Socket类)上面提供TCP 服务。下面代码就是连接到本地机(端口为1234),并获取响应流:/ 连接到服务器端口,在这里是选用本地机器作为服务器,你可以通过修改IP 地址来改变服务器try myclient = new TcpClient ( localhost , 1234 ) ; catch 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 16 页 - - - - - - - - - MessageBox.Show ( 没有连接到服务器! ) ; return ; / 创建 networkStream对象通过网络套节字来接受和发送数据networkStream = myclient.GetStream ( ) ; streamReader = new StreamReader ( networkStream ) ; streamWriter = new StreamWriter ( networkStream ) ; (2).实现接受和发送数据:在接受和发送数据上面,我们依然采用了NetworkStream 类,因为对他进行操作比较简单,具体实现发送和接受还是通过命名空间System.IO 中StreamReader类 ReadLine ( )方法和 StreamWriter 类的 WriteLine ( ) 方法。具体的实现方法如下:if ( textBox1.Text = ) MessageBox.Show ( 请确定文本框为非空! ) ; textBox1.Focus ( ) ; return ; try string s ; / 往当前的数据流中写入一行字符串streamWriter.WriteLine ( textBox1.Text ) ; / 刷新当前数据流中的数据streamWriter.Flush ( ) ; / 从当前数据流中读取一行字符,返回值是字符串名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 16 页 - - - - - - - - - s = streamReader.ReadLine ( ) ; ListBox1.Items.Add ( 读取服务器端发送内容: + s ) ; catch ( Exception ee ) MessageBox.Show ( 从服务器端读取数据出现错误,类型为: + ee.ToString ( ) ) ; (3).最后一步和服务器端是一样的,就是要关闭程序中创建的流,具体如下:streamReader.Close ( ) ; streamWriter.Close ( ) ; networkStream.Close ( ) ; 五客户端的部分代码:由于在客户端不需要侦听网络,所以在调用上面没有程序阻塞情况,所以在下面的代码中,我们没有使用到线程,这是和服务器端程序的一个区别的地方。总结上面的这些关键步骤,可以得到一个用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 ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 16 页 - - - - - - - - - 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 ( ) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 16 页 - - - - - - - - - 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 ) ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 13 页,共 16 页 - - - - - - - - - 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 ; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 16 页 - - - - - - - - - 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 ( ) ; 下图是编译上面二个程序后运行的界面:名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 15 页,共 16 页 - - - - - - - - - 图 01:C编写网络程序运行界面七总结:虽然在 .Net FrameWrok SDK 中只为网络编程提供了二个命名空间,但这二个命名空间中的内容却是十分丰富的,C利用这二个命名空间既可以实现同步和异步,也可以实现阻塞和非阻塞。 本文通过用C编写一个网络上信息传输的程序,展现了其丰富的内容,由于篇幅所限,更深,更强大的功能还需要读者去实践、探索。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 16 页,共 16 页 - - - - - - - - -

    注意事项

    本文(2022年C#网络编程初探 .pdf)为本站会员(Che****ry)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开