ImageVerifierCode 换一换
格式:DOC , 页数:16 ,大小:70.50KB ,
资源ID:3519843      下载积分:20 文钱
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,省得不是一点点
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.wenke99.com/d-3519843.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: QQ登录   微博登录 

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C#网络编程初探.doc)为本站会员(sk****8)主动上传,文客久久仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知文客久久(发送邮件至hr@wenke99.com或直接QQ联系客服),我们立即给予删除!

C#网络编程初探.doc

1、我们知道 C和 C的差异之一,就是他本身没有类库,所使用的类库是 .Net 框架中的类库-.Net FrameWork SDK。在.Net FrameWork SDK 中为网络编程提供了二个名称空间:“System.Net“和“System.Net.Sockets“。C就是通过这二个名称空间中封装的类和方法实现网络通讯的。首先我们解释一下在网络编程时候,经常遇到的几个概念:同步(synchronous)、异步(asynchronous )、阻塞( Block)和非阻塞(Unblock):所谓同步方式,就是发送方发送数据包以后,不等接受方响应,就接着发送下一个数据包。异步方式就是当发送方发送一个

2、数据包以后,一直等到接受方响应后,才接着发送下一个数据包。而阻塞套接字是指执行此套接字的网络调用时,直到调用成功才返回,否则此套节字就一直阻塞在网络调用上,比如调用 StreamReader 类的 Readlin ( )方法读取网络缓冲区中的数据,如果调用的时候没有数据到达,那么此 Readlin ( )方法将一直挂在调用上,直到读到一些数据,此函数调用才返回;而非阻塞套接字是指在执行此套接字的网络调用时,不管是否执行成功,都立即返回。同样调用 StreamReader 类的 Readlin ( )方法读取网络缓冲区中数据,不管是否读到数据都立即返回,而不会一直挂在此函数调用上。在Window

3、s 网络通信软件开发中,最为常用的方法就是异步非阻塞套接字。平常所说的C/S(客户端 /服务器)结构的软件采用的方式就是异步非阻塞模式的。其实在用 C进行网络编程中,我们并不需要了解什么同步、异步、阻塞和非阻塞的原理和工作机制,因为在.Net FrameWrok SDK 中已经已经把这些机制给封装好了。下面我们就用 C开一个具体的网络程序来说明一下问题。一本文中介绍的程序设计及运行环境(1).微软视窗 2000 服务器版(2).Net Framework SDK Beta 2 以上版本二服务器端程序设计的关键步骤以及解决办法:在下面接受的程序中,我们采用的是异步阻塞的方式。(1).首先要要在给

4、定的端口上面创建一个“tcpListener“对象侦听网络上面的请求。当接收到连结请求后通过调用“tcpListener“对象的“AcceptSocket“ 方法产生一个用于处理接入连接请求的 Socket 的实例。下面是具体实现代码:/创建一个 tcpListener 对象,此对象主要是对给定端口进行侦听tcpListener = new TcpListener ( 1234 ) ;/开始侦听tcpListener.Start ( ) ; /返回可以用以处理连接的 Socket 实例socketForClient = tcpListener.AcceptSocket ( ) ;(2).接受和

5、发送客户端数据:此时 Socket 实例已经产生,如果网络上有请求,在请求通过以后,Socket 实例构造一个“NetworkStream“对象,“NetworkStream“对象为网络访问提供了基础数据流。我们通过名称空间“System.IO“中封装的二个类 “StreamReader“和“StreamWriter“来实现对“NetworkStream“对象的访问。其中 “StreamReader“类中的 ReadLine ( )方法就是从“NetworkStream“对象中读取一行字符; “StreamWriter“类中的 WriteLine ( )方法就是对“NetworkStream“

6、对象中写入一行字符串。从而实现在网络上面传输字符串,下面是具体的实现代码:try/如果返回值是“true“,则产生的套节字已经接受来自远方的连接请求if ( socketForClient.Connected )ListBox1.Items.Add ( “已经和客户端成功连接!“ ) ;while ( true )/创建 networkStream 对象通过网络套节字来接受和发送数据networkStream = new NetworkStream ( socketForClient ) ;/从当前数据流中读取一行字符,返回值是字符串streamReader = new StreamReade

7、r ( 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 ) ;/刷新当前数据流中的数据

8、streamWriter.Flush ( ) ; catch ( Exception ey )MessageBox.Show ( ey.ToString ( ) ) ;(3).最后别忘了要关闭所以流,停止侦听网络,关闭套节字,具体如下:/关闭线程和流networkStream.Close ( ) ;streamReader.Close ( ) ;streamWriter.Close ( ) ;_thread1.Abort ( ) ;tcpListener.Stop ( ) ;socketForClient.Shutdown ( SocketShutdown.Both ) ;socketForC

9、lient.Close ( ) ;三C网络编程服务器端程序的部分源代码( server.cs):由于在此次程序中我们采用的结构是异步阻塞方式,所以在实际的程序中,为了不影响服务器端程序的运行速度,我们在程序中设计了一个线程,使得对网络请求侦听,接受和发送数据都在线程中处理,请在下面的代码中注意这一点,下面是 server.cs 的完整代码:using System ;using System.Drawing ;using System.Collections ;using System.ComponentModel ;using System.Windows.Forms ;using Syst

10、em.Data ;using System.Net.Sockets ;using System.IO ;using System.Threading ;using System.Net ;/导入程序中使用到的名字空间public class Form1 : Formprivate ListBox ListBox1 ;private Button button2 ;private Label label1 ;private TextBox textBox1 ;private Button button1 ;private Socket socketForClient ;private Netwo

11、rkStream 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 (

12、bool disposing )if ( disposing )if ( components != null ) components.Dispose ( ) ;base.Dispose ( disposing ) ;private void InitializeComponent ( )label1 = new Label ( ) ;button2 = new Button ( ) ;button1 = new Button ( ) ;ListBox1 = new ListBox ( ) ;textBox1 = new TextBox ( ) ;SuspendLayout ( ) ;lab

13、el1.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.Control

14、s.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 对象,此对象主要是对给定端口进行侦听tcpListener = new TcpListener

15、( 1234 ) ;/开始侦听tcpListener.Start ( ) ; /返回可以用以处理连接的 Socket 实例socketForClient = tcpListener.AcceptSocket ( ) ; try/如果返回值是“true“,则产生的套节字已经接受来自远方的连接请求if ( socketForClient.Connected )ListBox1.Items.Add ( “已经和客户端成功连接!“ ) ;while ( true )/创建 networkStream 对象通过网络套节字来接受和发送数据networkStream = new NetworkStream

16、( 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

17、) ;/往当前的数据流中写入一行字符串streamWriter.WriteLine ( textBox1.Text ) ;/刷新当前数据流中的数据streamWriter.Flush ( ) ; 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 (

18、“服务已经启动!“ ) ;_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

19、( SocketShutdown.Both ) ;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 ) ;socketForCli

20、ent.Close ( ) ;四客户端程序设计的关键步骤以及解决办法: (1).连接到服务器端的指定端口:我们采用的本地机既做服务器也做客户机,你可以通过修改 IP 地址来确定自己想要连接的服务器。我们在连接的时候采用了“TcpClient“类,此类是在较高的抽象级别(高于Socket 类)上面提供 TCP 服务。下面代码就是连接到本地机(端口为 1234),并获取响应流:/连接到服务器端口,在这里是选用本地机器作为服务器,你可以通过修改 IP 地址来改变服务器trymyclient = new TcpClient ( “localhost“ , 1234 ) ;catchMessageBox

21、.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 ;trystring s ;/往当前的数据流中写入一行字符串streamWriter.WriteLine ( textBox1.Text ) ;/刷新当前数据流中的数据

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。