TCP协议是一个基本的网络协议,基本上所有的网络服务都是基于TCP协议的,如HTTP,FTP等等,所以要了解网络编程就必须了解基于TCP协议的编程。然而TCP协议是一个庞杂的体系,要彻底的弄清楚它的实现不是一天两天的功夫,所幸的是在。net framework环境下,我们不必要去追究TCP协议底层的实现,一样可以很方便的编写出基于TCP协议进行网络通讯的程序。
C#基于TCP协议的网络通讯
要进行C#基于TCP协议的网络通讯,首先必须建立同远程主机的连接,连接地址通常包括两部分——主机名和端口,如www.yesky.com:80中, www.yesky.com就是主机名,80指主机的80端口,当然,主机名也可以用IP地址代替。当连接建立之后,就可以使用这个连接去发送和接收数据包,TCP协议的作用就是保证这些数据包能到达终点并且能按照正确的顺序组装起来。
在。net framework的类库(Class Library)中,提供了两个用于TCP网络通讯的类,分别是TcpClient和TcpListener.由其英文意义显而易见,TcpClient 类是基于TCP协议的客户端类,而TcpListener是服务器端,监听(Listen)客户端传来的连接请求。TcpClient类通过TCP协议与服务器进行通讯并获取信息,它的内部封装了一个Socket类的实例,这个Socket对象被用来使用TCP协议向服务器请求和获取数据。因为与远程主机的交互是以数据流的形式出现的,所以传输的数据可以使用。net framework中流处理技术读写。在我们下边的例子中,你可以看到使用NetworkStream类操作数据流的方法。
在下面的例子中,我们将建立一个时间服务器,包括服务器端程序和客户端程序。服务器端监听客户端的连接请求,建立连接以后向客户端发送当前的系统时间。
先运行服务器端程序,下面截图显示了服务器端程序运行的状况:
然后运行客户端程序,客户端首先发送连接请求到服务器端,服务器端回应后发送当前时间到客户端,这是客户端程序的截图:
发送完成后,服务器端继续等待下一次连接:
通过这个例子我们可以了解TcpClient类的基本用法,要使用这个类,必须使用System.Net.Socket命名空间,本例用到的三个命名空间如下:
-
using System;
-
using System.Net.Sockets;
-
using System.Text;
-
//从字节数组中获取字符串时使用该命名空间中的类
-
//首先讨论一下客户端程序,开始我们必须初始化一个TcpClient类的实例:
-
-
TcpClient client = new TcpClient(hostName, portNum);
-
//然后使用TcpClient类的GetStream()方法获取数据流,
并且用它初始化一个NetworkStream类的实例:
-
-
NetworkStream ns = client.GetStream();
注意,当使用主机名和端口号初始化TcpClient类的实例时,直到跟服务器建立了连接,这个实例才算真正建立,程序才能往下执行。如果因为网络不通,服务器不存在,服务器端口未开放等等原因而不能连接,程序将抛出异常并且中断执行。
建立数据流之后,我们可以使用NetworkStream类的Read()方法从流中读取数据,使用Write()方法向流中写入数据。读取数据时,首先应该建立一个缓冲区,具体的说,就是建立一个byte型的数组用来存放从流中读取的数据。Read()方法的原型描述如下:
- public override int Read(in byte[] buffer,int offset,int size)
buffer是缓冲数组,offset是数据(字节流)在缓冲数组中存放的开始位置,size是读取的字节数目,返回值是读取的字节数。在本例中,简单地使用该方法来读取服务器反馈的信息:
-
byte[] bytes = new byte[1024];//建立缓冲区
-
int bytesRead = ns.Read(bytes, 0, bytes.Length);//读取字节流
-
// 然后显示到屏幕上:
-
Console.WriteLine(Encoding.ASCII.GetString(bytes,0,bytesRead));
-
//最后不要忘记关闭连接:
-
- client.Close();
以上介绍C#基于TCP协议的网络通讯。
分享到:
相关推荐
本文首先概述了Socket的基本概念,接着深入讨论了基于TCP协议的Socket编程原理,并通过一个Java编写的客户端/服务器示例程序,展示了不同主机之间通过Socket进行通信的具体机制。 #### Socket简介 Socket是一种用于...
### Linux环境下基于TCP的Socket编程浅析 #### 一、引言 随着Linux操作系统的广泛应用,Socket编程成为了网络通信领域的重要技术之一。Socket不仅适用于同一台计算机上的进程间通信(IPC),同时也适用于网络环境...
在IT行业中,网络通信是软件...通过深入学习"浅析C#套接字.doc"和"C#网络编程之TCP.doc",可以进一步了解这些概念,并掌握在实际项目中如何运用它们。理解并熟练掌握TCP和UDP通信,对于开发高质量的网络应用至关重要。
浅析计算机网络通信协议 计算机网络通信协议是计算机与计算机之间的通信离不开的协议,实际上是一组规定和约定的集合。两台计算机在通信时必须约定好本次通信做什么,是进行文件传输,还是发送电子邮件;怎样通信,...
浅析计算机网络通信协议 计算机网络通信协议是计算机与计算机之间的通信的核心,它是一组规定和约定的集合。两台计算机在通信时必须约定好本次通信做什么,是进行文件传输,还是发送电子邮件;怎样通信,什么时间...
### TCP协议及工作原理浅析 #### 一、TCP/IP整体构架 TCP/IP协议作为互联网的核心协议之一,虽然没有完全遵循OSI的七层参考模型,但它自成一体的四层模型却成为了事实上的标准。为了更好地理解TCP/IP的工作方式,...
在C#编程中,内存管理是一项关键的概念,虽然程序员通常不需要直接进行内存分配和释放,但理解其工作原理对于编写高效、无泄漏的代码至关重要。本文将深入探讨C#中的内存管理,特别是值类型和引用类型如何在内存中...
"毕业论文浅析计算机网络通信协议" 计算机网络通信协议是计算机与计算机之间进行通信的基础。通信协议是一组规定和约定的集合,两台计算机在通信时必须约定好本次通信做什么,是进行文件传输,还是发送电子邮件;...
这些模块之间通过定义好的协议格式进行通信,其中adbserver和adbd是通过USB或TCP的方式通信的。 adbd是运行在Android设备或模拟器上的守护进程,它负责与adbserver建立连接,并提供adbd服务。在设备端,adbd会创建...
- 在C#中,可以使用System.Net命名空间下的类来进行网络编程,如Socket类用于低级别网络通信,TcpClient/TcpListener类用于TCP连接,以及HttpWebRequest/HttpWebResponse类处理HTTP请求和响应。 7. **网络模型的...
流套接字提供可靠的、顺序的、无损的数据传输,适合TCP协议;而数据报套接字则对应于UDP协议,不保证数据顺序或可靠性,但具有更高的效率。 C#中的套接字编程涉及以下几个关键步骤: 1. **服务器监听**:服务器端...
浅析基于DWDM的光纤通信技术及其发展趋势.pdf
C# 状态机 Stateless 详解 C# 状态机 Stateless 是一种轻量级的状态机库,能够帮助开发者轻松地创建状态机,实现状态之间的切换。下面是对 C# 状态机 Stateless 的详细介绍。 什么是状态机? 状态机(Finite ...
TCP协议中的定时器在拥塞控制、连接维护和数据确认等方面起着关键作用,例如延迟ACK机制用于提高效率,而保活定时器则用于检测长时间无数据交换的连接,防止资源浪费。 TCP的定时器种类多样,如重传定时器用于确保...
在C#中,图形编程是开发用户界面和创建可视化应用的关键部分。C#引入了GDI+(Graphics Device Interface Plus),这是一个比原始的GDI更为强大的图形处理库,旨在简化编程工作并提供更丰富的功能。GDI+允许开发者...
本文就计算机网络通信协议、选择网络通信协议的原则、TCP/IP 通信协议的安装、设置和测试等,作进一步的研究和探讨。 1 网络通信协议 目前,局域网中常用的通信协议主要有:NetBEUI 协议、IPX/SPX兼容协议和...
TCP 协议的通信是全双工的,TCP 协议允许通信双方的应用程序在任何时候都能发送数据。TCP 连接的两端都设有发送缓冲区和接收缓冲区,用来临时存放双向通信的数据。当应用程序写入数据到发送缓冲区时,TCP 会在合适的...
C#中的委托和事件是面向对象编程中两个重要的特性,它们在实际的软件开发中扮演着关键角色,尤其是在处理事件驱动编程和回调机制时。本文将深入解析C#中的委托和事件,通过实例来帮助理解它们的工作原理和应用场景。...