用c#完成基于tcp协议地网络通讯

用c#完成基于tcp协议地网络通讯

ID:19969169

大小:28.50 KB

页数:5页

时间:2018-10-08

用c#完成基于tcp协议地网络通讯_第1页
用c#完成基于tcp协议地网络通讯_第2页
用c#完成基于tcp协议地网络通讯_第3页
用c#完成基于tcp协议地网络通讯_第4页
用c#完成基于tcp协议地网络通讯_第5页
资源描述:

《用c#完成基于tcp协议地网络通讯》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、用C#完成基于TCP协议地网络通讯本文由默也蓝贡献doc文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编程。然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实现不是一天两天的功夫,所幸的是在.netframework环境下,我们不必要去追究TCP协议底层的实现,一样可以很方便的编写出基于TCP协议进行网络通讯的程序。要进行基于TCP协议的网络通讯,首先

2、必须建立同远程主机的连接,连接地址通常包括两部分——主机名和端口,如www.yesky.com:80中,www.yesky.com就是主机名,80指主机的80端口,当然,主机名也可以用IP地址代替。当连接建立之后,就可以使用这个连接去发送和接收数据包,TCP协议的作用就是保证这些数据包能到达终点并且能按照正确的顺序组装起来。在.netframework的类库(ClassLibrary)中,提供了两个用于TCP网络通讯的类,分别是TcpClient和TcpListener。由其英文意义显而易见,TcpClient类是基于TCP

3、协议的客户端类,而TcpListener是服务器端,监听(Listen)客户端传来的连接请求。TcpClient类通过TCP协议与服务器进行通讯并获取信息,它的内部封装了一个Socket类的实例,这个Socket对象被用来使用TCP协议向服务器请求和获取数据。因为与远程主机的交互是以数据流的形式出现的,所以传输的数据可以使用.netframework中流处理技术读写。在我们下边的例子中,你可以看到使用NetworkStream类操作数据流的方法。在下面的例子中,我们将建立一个时间服务器,包括服务器端程序和客户端程序。服务器端

4、监听客户端的连接请求,建立连接以后向客户端发送当前的系统时间。先运行服务器端程序,下面截图显示了服务器端程序运行的状况:然后运行客户端程序,客户端首先发送连接请求到服务器端,服务器端回应后发送当前时间到客户端,这是客户端程序的截图:发送完成后,服务器端继续等待下一次连接:通过这个例子我们可以了解TcpClient类的基本用法,要使用这个类,必须使用System.Net.Socket命名空间,本例用到的三个命名空间如下:usingSystem;usingSystem.Net.Sockets;usingSystem.Text;/

5、/从字节数组中获取字符串时使用该命名空间中的类首先讨论一下客户端程序,开始我们必须初始化一个TcpClient类的实例:TcpClientclient=newTcpClient(hostName,portNum);然后使用TcpClient类的GetStream()方法获取数据流,并且用它初始化一个NetworkStream类的实例:NetworkStreamns=client.GetStream();注意,当使用主机名和端口号初始化TcpClient类的实例时,直到跟服务器建立了连接,这个实例才算真正建立,程序才能往下执行

6、。如果因为网络不通,服务器不存在,服务器端口未开放等等原因而不能连接,程序将抛出异常并且中断执行。建立数据流之后,我们可以使用NetworkStream类的Read()方法从流中读取数据,使用Write()方法向流中写入数据。读取数据时,首先应该建立一个缓冲区,具体的说,就是建立一个byte型的数组用来存放从流中读取的数据。Read()方法的原型描述如下:publicoverrideintRead(inbyte[]buffer,intoffset,intsize)buffer是缓冲数组,offset是数据(字节流)在缓冲数组

7、中存放的开始位置,size是读取的字节数目,返回值是读取的字节数。在本例中,简单地使用该方法来读取服务器反馈的信息:byte[]bytes=newbyte[1024];//建立缓冲区intbytesRead=ns.Read(bytes,0,bytes.Length);//读取字节流然后显示到屏幕上:Console.WriteLine(Encoding.ASCII.GetString(bytes,0,bytesRead));最后不要忘记关闭连接:client.Close();下面是本例完整的程序清单:usingSystem;u

8、singSystem.Net.Sockets;usingSystem.Text;namespaceTcpClientExample{publicclassTcpTimeClient{privateconstintportNum=13;//服务器端口,可以随意修改privateconstst

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。