“保姆级别”从零开始的C#TCP网络通信教程

“保姆级别”从零开始的C#TCP网络通信教程

经过几日的原理学习和扒码之后,终于七七八八搞明白tcp的通信是怎么进行的了。
注:源码为《C#开源虚拟仪器技术》实例


前言

本文主要给大家提供从零开始做一个包含客户端和服务端的tcp通信窗体应用的教程,并在此基础上理解TCP通信的原理,理解使用socket套接字进行通信的概念和实际运用,全文包含从原理到例程的详细操作,保证简单易上手


一、什么是tcp通信

首先,TCP是计算机实现网络通信的一种方式,全称是传输控制协议,计算机通信需要知道计算机的地址,互联网使用IP地址来标识计算机的网络地址,IP协议层往上是传输层,它提供了TCP和UDP这两种可选的协议,之所以选择TCP协议进行计算机的网络通信,是因为它的好处是能够检测和恢复IP层提供的主机到主机的信道可能发生的报文丢失、重复及其他错误,而socket处于TCP这类具体协议层上,它是进行网络通信最基本的操作单元,可以看做是两台主机进行通讯的端点。TCP通信,依靠的就是IP地址到socket套接字这样的由宏观到微观的这样一个过程。(或者直接使用已经封装好的Tcplistener类和TcpClient类来实现) 通过TCP/IP可实现单个网络内部或互联网间的通信,同时可提供简单的用户界面,有较高的网络通信的可靠性。所以本文主要倾向于如何进行用户界面即客户端和服务端的设计以及相关代码的实现。

二、如何实现tcp通信

TCP的工作过程可分为三个重要的阶段,一是建立连接,二是传输数据,二是断开连接

1.建立连接

建立连接最关键的一步就是进行3次握手,这一步主要关注三个“硬性指标”,分别是

  1. ACK,tcp报头的控制位之一,用于表示确认号是否有效,若有效则置1(确认号:用于告诉数据发送端发送过来的序列号之前的数据都已经接收到了)
  2. SYN,同步序列号,如果TCP建立连接成功则置1
  3. FIN,发送端完成发送任务位,当TCP完成了数据传输的任务,想要断开连接之后,该位置1

详细过程:(同步通信方式)假定服务端向客户端发送信息

  1. 服务端向客户端发送一个含有SYN的数据段给客户端,并请求连接
  2. 客户端收到服务端收到请求后,用含有ACK和SYN的数据段响应服务端
  3. 服务端收到客户端发来的数据段后,再发送一个ACK,确认收到数据段,至此建立连接成功。

注:握手的步骤在协议内部协议实现的,不体现在具体的上位机代码中。理解握手过程即可

2.传输数据

建立连接之后,就可以通过通信信道进行传输数据的任务了,但是需要注意的是TCP协议中的数据是以字节流的形式存在的,发送端需要将的数据转换为字节流,然后才可以发送。通常是字符集转换为字节序列,这其中就涉及到编码和解码的问题了。

3.断开连接

断开连接主要是关闭读写流。至于是服务端先断开连接还是客户端先断开连接,有时需要进行异常处理。


三、窗体设计

这一步主要使用工具箱中的按钮button和文本框text控件,点击相应控件即可查看代码。Label控件用于标识文本框。

服务端client

服务端窗体设计

客户端server

客户端窗体设计
注意事项:
这里需要注意的是要确保按钮的命名,以及其事件的名称,如客户端的发送按钮,要确保正确。示例如下:

客户端发送按钮
客户端发送按钮
按钮的命名
命名
按钮事件即操作的命名
操作Click的名称
这一步的命名操作十分关键,关系到实际代码中的运行。以此类推。

四、tcp代码实现(注:源码为《C#开源虚拟仪器技术》实例)

为使编程变得简洁,这里使用类库Tcplistener类和TcpClient类实现Tcp通信(已经包含Socket套接字方法),并且服务端server只负责接收信息,客户端只负责发送信息。
如果要实现全双工通信,加入多线程thread,对每个tcp开两个线程,一个线程用来处理发送数据,一个线程用来处理接收数据即可。推荐使用异步通讯方式,无阻塞现象。

客户端client代码

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using System.Windows.Forms;

namespace _13._2._3._1
{
   
    public partial class TCPClient : Form
    {
   
        #region 变量
        private TcpClient tcpClient = null;
        private 
  • 8
    点赞
  • 81
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
建立一个BBS论坛需要考虑以下几个方面: 1. 确定论坛类型和功能 2. 设计数据库结构 3. 编写前端界面 4. 编写后端逻辑 5. 部署和维护 下面是一个从零开始基于Python开发BBS论坛的保姆级教学: 1. 确定论坛类型和功能 首先要确定你要创建的论坛类型和功能。是一个简单的问答论坛,还是一个社区论坛,还是一个资讯论坛?你需要确定你要实现的功能,例如用户注册、登录、发帖、回复、私信、搜索等等。 2. 设计数据库结构 我们需要设计数据库来存储用户信息、论坛帖子、回复等数据。可以使用MySQL、SQLite等关系型数据库。设计数据库结构时需要考虑到数据的关联性和一致性。 3. 编写前端界面 接下来,我们需要设计前端界面,包括网页布局、样式和交互效果。可以使用HTML、CSS和JavaScript等技术来实现。建议使用Bootstrap等前端框架来快速搭建界面。 4. 编写后端逻辑 编写后端逻辑需要使用Python开发框架,比如Django、Flask等。后端逻辑包括用户认证、数据读写、业务逻辑等。我们需要根据前端界面设计API接口,通过Python编写后端逻辑来实现这些功能。 5. 部署和维护 最后,我们需要将BBS论坛部署到服务器上,并对其进行维护。可以选择使用云服务器,比如AWS、阿里云等。并且需要定期更新代码、备份数据和优化性能等。 总结: 以上就是基于Python开发BBS论坛的保姆级教学。需要注意的是,BBS论坛涉及到用户隐私和数据安全等问题,需要谨慎处理。另外,由于开发BBS论坛需要包括前端、后端和数据库等多个方面的知识,所以建议有一定的编程经验的人才尝试开发。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值