TCP/IP网络编程之socket交互流程
一、概要
本篇文章主要讲解基于.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.挂断(结束)
阅读以上流程接下来我们来看看流程图就非常好理解了:

个人技术分享公众号,不定时更新技术文章↓

TCP/IP网络编程之socket交互流程的更多相关文章
- TCP/IP网络编程之I/O流分离
分离I/O流 “分离I/O流”是一种常用表达,有I/O工具可以区分二者.无论使用何种办法,都可以认为分离I/O流.我们之前通过两种方法分离I/O流,第一种是TCP/IP网络编程之进程间通信中的“TCP ...
- TCP/IP网络编程之I/O复用
基于I/O复用的服务端 在前面章节的学习中,我们看到了当有新的客户端请求时,服务端进程会创建一个子进程,用于处理和客户端的连接和处理客户端的请求.这是一种并发处理客户端请求的方案,但并不是一个很好的方 ...
- [网络编程之Socket套接字介绍,套接字工作流程,基于TCP协议的套接字程序]
[网络编程之Socket套接字介绍,套接字工作流程,基于TCP协议的套接字程序] 为何学习socket套接字一定要先学习互联网协议: 1.首先:要想开发一款自己的C/S架构软件,就必须掌握socket ...
- 网络编程之Socket & ServerSocket
网络编程之Socket & ServerSocket Socket:网络套接字,网络插座,建立网络通信连接至少要一对端口号(socket).socket本质是编程接口(API),对TCP/IP ...
- [深入浅出Cocoa]iOS网络编程之Socket
http://blog.csdn.net/kesalin/article/details/8798039 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] [深入浅出Co ...
- 网络编程之socket
网络编程之socket socket:在网络编程中的一个基本组件,也称套接字. 一个套接字就是socket模块中的socket类的一个实例. 套接字包括两个: 服务器套接字和客户机套接字 套接字的实例 ...
- GO语言的进阶之路-网络编程之socket
GO语言的进阶之路-网络编程之socket 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.什么是socket; 在说socket之前,我们要对两个概念要有所了解,就是IP和端口 ...
- 网络编程之Socket代码实例
网络编程之Socket代码实例 一.基本Socket例子 Server端: # Echo server program import socket HOST = '' # Symbolic name ...
- 浅谈TCP/IP网络编程中socket的行为
我认为,想要熟练掌握Linux下的TCP/IP网络编程,至少有三个层面的知识需要熟悉: 1. TCP/IP协议(如连接的建立和终止.重传和确认.滑动窗口和拥塞控制等等) 2. Socket I/O系统 ...
随机推荐
- PHP strpbrk() 函数
实例 在字符串中搜索字符 "oe",并返回字符串中从指定字符第一次出现的位置开始的剩余部分: <?php高佣联盟 www.cgewang.comecho strpbrk(&q ...
- 服务治理框架dubbo中zookeeper的使用
Zookeeper提供了一套很好的分布式集群管理的机制,就是它这猴子那个几月层次型的目录树的数据结构,并对书中的节点进行有效的管理,从而可以设计出多种多样的分布式的数据管理模型:下面简要介绍下zook ...
- linux集群服务网络状态(netstat),服务端页面(图形字符页面)基本配置
Linux网络基础配置 yum -y install vim 安装vim 关闭的防火墙服务 iptables -F iptables -X iptables -Z systemctl s ...
- Linux的VMWare中Centos7文件系统挂载和开启网卡及简单命令
一.路径 挂载磁盘/etc/fastab 开启网卡 vi .bash_profile ---更改PATH环境变量 可设置 mysql提示符 cd /etc/yum.rep ...
- RabbitMQ好文章推荐
文章来源:掘金 作者:申城异乡人 RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例 https://juejin.im/post/5ce644b9f ...
- 【BZOJ4318】OSU! 题解(期望)
题目链接 题目大意:给定$n$个操作的成功率$p[i]$.连续成功操作$m$次可以贡献$m^3$的分数.问期望分数. 对于$(x+1)^3$ $=x^3+3x^2+3x+1$ 每多连续成功一次,对答案 ...
- OpenCL设计优化(基于Intel FPGA SDK for OpenCL)
1.首先了解Intel FPGA SDK for OpenCL实现OpenCL的设计组件,包括: kernels, global memory interconnect, local memory, ...
- 11-Arrays工具类的使用
1.理解:① 定义在java.util包下.② Arrays:提供了很多操作数组的方法. 2.使用: //1.boolean equals(int[] a,int[] b):判断两个数组是否相等. i ...
- 基于Qt实现的TCP端口数据转发服务器
对于Qt,比较喜欢qt的sdk框架,我也是用于做一些工作中用到的工具软件,基于qt的sdk做起来也比较快: 一.概述 今天要说的这个tcp端口转发服务器,主要是用于将监听端口的数据转发到另外一个服务器 ...
- CF1349F 【Slime and Sequences】part2
由于本文过长,\(\LaTeX\) 炸了,分两篇,part1 优化 我们假装不会欧拉数的通项式(其实是因为它的通项式不容易继续优化?),使用容斥代替掉欧拉数 设 \(\begin{vmatrix}n\ ...