基于C#的网络通信实现
2018-09-13程志祥
程志祥
摘要:在 Visual Studio 2012应用程序软件中,选择C#开发环境,分析了网络编程经常使用的类以及它们的属性、方法和用途等,通过使用网络编程,设计了服务器与客户机通讯程序,可以达到服务端与客户端双向通信的目的,实验表明,本设计具有友好的界面,可以较好地完成通信。
关键词:VS2012;C#;TCPClient 类;TCPListener 类;Socket类
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)17-0031-02
C#是Microsoft在2000年7月推出.NET Framework的初版时提出的一种全新语言[1]。其派生于C/C++,语法更加简化,非常适合快速学习开发,C#语言吸取了C/C++的优点,摒弃了它们的烦琐之处。
利用Visual C#语言可以方便快速编写应用程序,互联网时代已经离不开网络信息的交换,为了方便不同计算机和不同网络之间相互连接,进行数据资源共享,需要使用网络通信协议。当前,TCP/IP协议是用得比较普遍的类型 [2]。
1 实现网络通信的主要类
网络通信一般会用到三大类,使用Sockets类具有许多优势,与Sockets网络应用程序有关的类处于System.Net.Sockets命名空间中,Socket类拥有许多属性和方法,完全支持套接字的编程,可以实现对端口的绑定、监听以及连接、数据传输等目的[3]。
1.1 TcpClient类
基于TcpClient类的编程,使得以传输控制协议TCP网络通信的调用形式更为方便,其主要用于Client端编程,如表1列出了其常用属性和方法。
1.2 TcpListener类
TCP协议服务器端的设计通常会用到TcpListener类,它属于.NET框架下网络通信中的应用层,通常是监视TCP端口上客户端的请求,如表2列出了其常用的属性和方法。
1.3 Socket类
Socket类提供了对套接字的支持[3],由于C#语言语法简洁、功能强大,因此基于套接字的网络编程变得十分简单,如表3列出了其常见属性和方法。
2 通信机制的设计与实现
TCP网络通讯运行时,它将会先初始化服务器端的程序,接着使用Socket类来创立一个实例,继而使用Bind()方法将实例与服务器IP地址绑定在一起,做好准备工作;接着使用Listener()方法进入开始监听客户机端的状态,同时指明等候服务器请求队列的长度;然后,使用Accept()方法等候客户端发出连接申请。客户端与服务端一样,也会使用Socket创立一个实例,然后使用Connect()方法与服务器建立连接。在服务器端监听的过程中,当客户端发出连接请求且被服务器端接收到,就表明服务器端与客户机端连接成功,此时可以进行通信了,可利用网络流 NetworkStream 的读Read()方法以及写Write()方法达到发送或接收数据包的目的,其通讯流程如图1所示。
3 实验结果与分析
服务端与客户端界面设计如上图所示,服务端输入有效且格式正确的IP地址以及监听端口,点击开始监听按钮,客户机端输入相同的IP地址和请求端口,点击请求连接按钮,在服务器端statusStrip1上显示与客户建立连接,如图2所示;在客户机端的statusStrip1上也会自动显示与主机和端口连接成功,如图3所示。此时服务器端和客户机端就能互相通信了。如图4所示,在服务器端发送消息框中输入问候语,点击发送信息按钮,消息成功发送,如图5所示,在客户机端的接受消息框中会显示所接收到的信息,即服务器端的发送消息框中的信息,消息成功接收。如图5所示,在客户机端发送信息框中输入回复的消息,点击发送消息按钮,信息成功地从客户机端发送出去。如图4所示,在服务器端的接收信息框中会显示来自客户机端的消息,即消息成功接收。达到了服务器端和客户机端双向通信的目的。
4 结语
笔者采用Visual Studio 2012 开发平台,利用C#的Windows窗體应用程序进行了网络通信的探讨,用到了网络编程常用的类,方便快速地建立了网络连接,Sever端和Client端成功通信,完成了数据发送与接收。TCP在连接方式上一般能够分为长期连接和短期连接,考虑TCP通讯的特点和本设计的主旨,笔者选用长期连接,连接成功后,通讯不会主动闭塞,服务器端和客户机端可以长时间通信,符合聊天的特点。
参考文献:
[1] Kali Watson,Christian Nagel .C#入门经典[M].齐立波,译.5版.北京:清华大学出版社,2010 .
[2] 刘蓓丽,刘大红.基于Visual C#的网络通信编程技术[J] .Electronic Science and Technology,2013(11):151-153
[3] 周存杰 .C#网络编程实例教程[M].北京:北京希望电子出版社,2002.