一、概要
本篇文章主要讲解基于.net中tcp/ip网络通信编程。在自我进步的过程中记录这些内容,方便自己记忆的同时也希望可以帮助到大家。技术的进步源自于分享和不断的自我突破。
技术交流QQ群:580749909 欢迎交流有问必答,文章尾有个人的微信公众号有兴趣的小伙伴多多关注。整篇文章走向比较偏应用层面,不会涉及底层因为网络通信博大精深要把整个都讲明白可以出一本书了。
二、简介
什么是网络编程,网络编程就是编写程序使两台连联网的计算机相互交换数据。怎么交换数据呢?两台电脑都插一根线就可以了吗?稍微夸张点说差不多是这个意思(需要物理连接)
有人就会问了,我平常跟张三聊QQ的时候我也没跟他直接连网线那怎么可以联网呢。你买了电信的宽带电信是不是得给你牵线装猫,最终这些线会连到电信的机房由他们来管理。在这个基础上,
如何编写数据传输软件呢。操作系统提供了“套接字”(socket)的组件我们基于这个组件进行网络通信开发。
本章主要讨论tcp套接字,接下来的工作流程都会以“打电话”来生动表达,tcp套接字可以比喻成电话。
三、主要内容
电话可以同时用来拨打和接听的,但对套接字而言,拨打和接听是有区别的。我们先讲解套接字创建过程。其实这个过程跟我们生活中的打电话的场景比较相似。
我们来解析打电话的步骤:
1.通信方式有很多种,可以当面沟通、书信沟通、电话沟通、托人带话等等。
这里张三和李四约定好都用电话沟通(确认通讯协议,这里指TCP/IP),张三给李四打电话(张三在这里的身份是客户端,而李四对应身份是服务端 身份也确认好了)。
2.双方打电话得有电话机(创建socket对象)
3.张三必须知道拨打对象的电话号码(知道服务端的ip和port),李四电话号码是123456(绑定套接字)
4.张三拨打李四电话(客户端连接服务端,connect连接)
5.被打电话的那一方听到电话响了(listen监听)
6.李四害怕是推销电话想着要跟他确认身份是不是张三,不是张三就准备挂断电话
7.接起电话确认对方身份,张三问是李四吗(三次握手中,第一次握手)
8.李四回答,我是李四。你是?(三次握手,第二次握手)
9.张三说你好李四,我是张三(三次握手,第三次握手)
10.确认过眼神遇上对的人,李四决定跟他继续谈话(accept接受连接请求)
11.接下来就开始长篇大论的攀谈(数据交互)
12.最终要挂电话了,张三对李四说那今天就讲到这里(四次挥手,第一次)
13.李四说行啊今天就讲到这里(四次挥手,第二次)
14.张三说那我挂断了啊(四次挥手,第三次)
15.李四说好的你挂吧(四次挥手,第四次)
16.挂断(结束)
阅读以上流程接下来我们来看看流程图就非常好理解了:
个人技术分享公众号,不定时更新技术文章↓